第七章---面向对象的程序设计(Python)

欢迎来到python的世界 
博客主页:卿云阁

欢迎关注点赞收藏⭐️留言

本文由卿云阁原创!

本阶段属于筑基阶段之一,希望各位仙友顺利完成突破

首发时间:2021年12月11日

✉️希望可以和大家一起完成进阶之路!

作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


目录

0️⃣编程的两大重要思想     

1️⃣类和对象

2️⃣私有属性和公有属性

3️⃣类方法、实例方法,静态方法 

4️⃣私有方法和公有方法

5️⃣继承

0️⃣✨✨✨编程的两大重要思想✨✨✨      

面向过程和面向对象

突然想吃番茄炒蛋
面向过程的做法: 1.去买番茄和鸡蛋 2.洗番茄,打鸡蛋 3.放油,煎鸡蛋,把煎好的鸡蛋放到盘子     里。4.开始炒番茄 5.放在一起炒
面向对象的做法: 点外卖。


1️⃣✨✨✨类和对象✨✨✨

Python中一切对象

类属性和实例对象属性

class Person2 :
      count=0
      name="Person"                      #类属性(直接写在类里的变量)
      def __init__(self, name, age):     #初始化方法
         self.name1 = name
         self.age1 = age                  # self.age实例对象属性
      def say_hi(self):                  #实例方法
         print("你好,我叫",self.name1)
p1 = Person2('卿云',18)                   #对象的创建
p1.say_hi()


#结果:
#runfile('C:/Users/张钊/.spyder-py3/temp.py', wdir='C:/Users/张钊/.spyder-py3')
#你好,我叫 卿云 

 第七章---面向对象的程序设计(Python)_第1张图片

补充:

(1)self

翻译:自;自我;自己。

             我建议在形参列表中加上self,它本身要接受的是实例对象可以用其他的参数名,但是为了便于阅读和理解一般选择self。

p1 = Person2('卿云',18) 

p1-------------------------->self

注意:类中的方法第一个参数是 self 的才可以被实例调用。

类中带 self 的参数都是实例的,实例对这个参数拥有所有权,即实例中所有的方法都可以使用实例的参数。

(2)   类和对象的创建

class Person2 :             #类的创建

 p1 = Person2('卿云',18)                   #对象的创建

1.__new__------------------>创建对象通俗点说有个内存空间(一般不用写)

2.__init__-------------------->刚申请的空间进行初始化

                              

                                                        类对象的创建

类属性:(实例对象共有的)

count=0

name="Person"  

类方法:

def __init__(self, name, age): 

 def say_hi(self):

......

                                                         实例对象的创建

name1="卿云“

age1=18(age1指向18)

默认属性:

--class--

指向类对象

--dict--

当前对象的所有属性

3.类属性和实例对象属性

class Person2 :
      count=0
      name="Person"                      #类属性(直接写在类里的变量)
p1=Person2()
p2=Person2()
print((p1.name,p2.name))               #(p1.name,p2.name)是一个元组
Person2.name="卿云"
print((p1.name,p2.name)) 
p1.name="卿云"
p2.name="卿云阁"
print((p1.name,p2.name))

#('Person', 'Person')
#('卿云', '卿云')
#('卿云', '卿云阁')

第七章---面向对象的程序设计(Python)_第2张图片

默认情况下类属性是直接被开放出去的,可以被改变的。由于我们不希望类的属性在类外被改因为这样会使类的封装性变差,所以我们要有私有属性。


2️⃣✨✨✨私有属性和公有属性✨✨✨ 

class A:
    __name='卿云'
    def get_name():
        print(A.__name)
A.get_name()
#A. __name    类外不允许直接访问私有属性


#结果
#卿云

第七章---面向对象的程序设计(Python)_第3张图片

私有属性:通常约定以2个下划线开头但是不以2个下划线结束的属性是私有的其他为公有的。不可以在类外直接访问私有属性但是可以在方法中访问。


3️⃣✨✨✨类方法、实例方法,静态方法✨✨✨ 

类方法、@classmethod    传递的是类对象的引用。类方法可以被实例调用,也可以被类调用。

类方法由类调用,采用 @classmethod 装饰,至少传入一个cls(代指类本身,类似self)参数。执行类方法时, 自动将调用该方法的类赋值给cls。建议只使用类名.类方法的调用方式。(虽然也可以使用实例名.类方法的方式 调用)
class Person:
    @classmethod #装饰器的作用:在保证原函数不变的情况下,直接给这个函数增加一些功能
    def leifangfa(cls,a):
        print("这是一个类方法" , a)
        
Person.leifangfa(123)
p = Person()
p.leifangfa(666)
func = Person.leifangfa
func(111)

第七章---面向对象的程序设计(Python)_第4张图片

实例方法, 传递的是实例对象的引用。

class Person:
    def eat(self,food):#self可以是aa、bb 等,一般是self
        print('在吃饭',food)

p = Person()
p.eat('土豆')


        

第七章---面向对象的程序设计(Python)_第5张图片

静态方法,@staticmethod        不传递对象的引用(既可以通过类调用,也可以通过示例调用)

class Person:
    @staticmethod #装饰器的作用:在保证原函数不变的情况下,直接给这个函数增加一些功能
    def jingtai():
        print("这是一个静态方法")
        
p = Person()
p.jingtai()
func = Person.jingtai
func()

第七章---面向对象的程序设计(Python)_第6张图片


4️⃣✨✨✨私有方法和公有方法✨✨✨

不能直接访问私有方法,但可以在其它方法中访问

class Person:                    
      def __init__(self, name, age):     
         self.name = name
         self.age = age  
      def __check_name(self):  #判断name是否为空
          if self.name=='':return False
          else: return True
      def get_name(self):    
          if self.__check_name():print(self.name, self.age)
          else: print("NO Value")
p = Person('卿云',18) 
p.get_name()
#p.__check_name是非法的

第七章---面向对象的程序设计(Python)_第7张图片


 5️⃣✨✨✨继承✨✨✨

派生类

class Person:  
      def __init__(self, name, age):     
         self.name = name
         self.age = age 
      def say_hi(self):                  
         print("你好,我叫{0},{1}岁".format(self.name,self.age))
class Student: 
      def __init__(self, name, age,id):     
         self.name = name
         self.age = age 
         self.id = id 
      def say_hi(self): 
         Person.say_hi(self)
         print("id is",self.id )      

p1 = Person('卿云',18)  
p1.say_hi()
s1=  Student('zhangxveqing',18,'2020180') 
s1.say_hi()

结果:
你好,我叫卿云,18岁
你好,我叫zhangxveqing,18岁
id is 2020180

第七章---面向对象的程序设计(Python)_第8张图片

类成员的继承与重写

class D:  
      def __init__(self, x, y):     
         self.x = x
         self.y = y 
      def area(self):
          pass
class C(D): 
      def __init__(self, r):     
         D.__init__(self, r, 0)
      def area(self):
          return 3.14* self.x* self.x
class R(D): 
      def __init__(self, w,h):     
         D.__init__(self, w,h)
      def area(self):
          return self.x* self.y
d1=C(2.0)
d2=R(2.0,4.0)
print(d1.area(),d2.area())

#结果:
#12.56 8.0

 第七章---面向对象的程序设计(Python)_第9张图片

你可能感兴趣的:(python,python)