Python3 面向对象(同步发生冲突)

面向对象


    • 类名称首字母大写
    • 类内部 变量、函数
      • 变量:称为数据成员,特征
      • 函数:称为方法,行为
    • 类最基本作用:封装
    • 构造函数
      • 用来生成不同的对象
      • 初始化对象的属性

class Student(): #名称首字母大写
    name = '' #数据成员 类变量
    age = 0
    
    def __init__(self,name,age): #实例化时自动运行构造函数
        # 构造函数
        self.name = name # 实例变量
        self.age = age
    
    def print_file(self): #self固定特征
        print('姓名:'+ self.name)
        print('年龄:' + self.age)


student = Student() #实例化一个类

student.print_file() #调用类下面的方法

方法和函数的区别

  • 方法:设计层面
  • 函数:程序运行、过程式的一种称谓

类变量和实例变量

  • 类变量:和类关联在一起的
  • 实例变量:和对象关联在一起的
class Student():
    name = '李四'

    def __init__(self,name):
        self.name = name 
        print(self.name) # 打印的是实例变量
        print(name) # 打印的是参数
        print(Student.name) # 调用类变量
        print(self.__class__.name) #调用类变量另一种方法

    def do_homework(self):
        print('home')
        
zs = Student('张三')

#打印结果
张三
张三

self与实例方法

  • 类下面的实例方法,规定第一个参数必须是self
  • 调用实例方法时,不需要传入self参数

类方法

定义类方法:

  • @classmethod 装饰器
  • cls 参数
  • 对象可以调用类方法,但是不建议这样做
  • 类方法里面不能调用 实例变量
class ZhongYan():
    pinpai = 0

    def __init__(self,ppmc):  # 构造函数
        self.ppmc = ppmc

    def guige(self):    # 实例方法    
        pass
        
    # 类方法
    @classmethod        # 装饰器
    def ppsl(cls):      # 约定俗成 cls 类参数 
        cls.pinpai += 1
        print('中烟的品牌数量:' + str(cls.pinpai))
        print(self.ppmc) # 类方法里面不能调用实例变量,会报错
        
henan = ZhongYan('黄金叶')
Zhongyan.ppsl()
Zhongyan.ppsl()
# 运行结果
中烟品牌数量:1
中烟品牌数量:2

静态方法

  • @staticmethod装饰器
  • 不需要self或者cls约定成俗的参数
  • 对象和类都可以调用静态方法
  • 静态方法 里面不能调用 实例变量
  • 静态方法 不建议经常使用,当静态方法与类和实例关联性不大时,使用静态方法
class ZhongYan():
    pinpai = 0

    def __init__(self,ppmc):  # 构造函数
        self.ppmc = ppmc

    def guige(self):    # 实例方法    
        pass
        
    # 类方法
    @classmethod        # 装饰器
    def ppsl(cls):      # 约定俗成 cls 类参数 
        cls.pinpai += 1
        print('中烟的品牌数量:' + str(cls.pinpai))
        
    @staticmethod       # 装饰器
    def add(x,y):       # 参数不是self也不是cls
        print('这是一个静态方法')
        print(self.ppmc) # 静态方法里面不能调用 实例变量,这样会报错
        

成员的可见性

  • 可见性:
    • 变量
    • 方法
  • public 公开的
  • private 私有的,外部无法读取或设置
  • 内部外部
    • 类为内部
    • 实例对象为外部
  • 类下面变量的更改,都应该通过方法来完成

内容提纲

Python类
  • 变量
    • 类变量
    • 实例变量
  • 方法
    • 实例方法
    • 类方法
    • 静态方法
  • 构造函数
  • 成员的可见性

面向对象

内容提纲

Python类
  • 变量
    • 类变量
    • 实例变量
  • 方法
    • 实例方法
    • 类方法
    • 静态方法
  • 构造函数
  • 成员的可见性
  • 面向对象3大特征:
    • 继承性
    • 封装性
    • 多态性

    • 类名称首字母大写
    • 类内部 变量、函数
      • 变量:称为数据成员,特征
      • 函数:称为方法,行为
    • 类最基本作用:封装
    • 构造函数
      • 用来生成不同的对象
      • 初始化对象的属性

class Student(): #名称首字母大写
    name = '' #数据成员 类变量
    age = 0
    
    def __init__(self,name,age): #实例化时自动运行构造函数
        # 构造函数
        self.name = name # 实例变量
        self.age = age
    
    def print_file(self): #self固定特征
        print('姓名:'+ self.name)
        print('年龄:' + self.age)


student = Student() #实例化一个类

student.print_file() #调用类下面的方法

方法和函数的区别

  • 方法:设计层面
  • 函数:程序运行、过程式的一种称谓

类变量和实例变量

  • 类变量:和类关联在一起的
  • 实例变量:和对象关联在一起的
class Student():
    name = '李四'

    def __init__(self,name):
        self.name = name 
        print(self.name) # 打印的是实例变量
        print(name) # 打印的是参数
        print(Student.name) # 调用类变量
        print(self.__class__.name) #调用类变量另一种方法

    def do_homework(self):
        print('home')
        
zs = Student('张三')

#打印结果
张三
张三

self与实例方法

  • 类下面的实例方法,规定第一个参数必须是self
  • 调用实例方法时,不需要传入self参数

类方法

定义类方法:

  • @classmethod 装饰器
  • cls 参数
  • 对象可以调用类方法,但是不建议这样做
  • 类方法里面不能调用 实例变量
class ZhongYan():
    pinpai = 0

    def __init__(self,ppmc):  # 构造函数
        self.ppmc = ppmc

    def guige(self):    # 实例方法    
        pass
        
    # 类方法
    @classmethod        # 装饰器
    def ppsl(cls):      # 约定俗成 cls 类参数 
        cls.pinpai += 1
        print('中烟的品牌数量:' + str(cls.pinpai))
        print(self.ppmc) # 类方法里面不能调用实例变量,会报错
        
henan = ZhongYan('黄金叶')
Zhongyan.ppsl()
Zhongyan.ppsl()
# 运行结果
中烟品牌数量:1
中烟品牌数量:2

静态方法

  • @staticmethod装饰器
  • 不需要self或者cls约定成俗的参数
  • 对象和类都可以调用静态方法
  • 静态方法 里面不能调用 实例变量
  • 静态方法 不建议经常使用,当静态方法与类和实例关联性不大时,使用静态方法
class ZhongYan():
    pinpai = 0

    def __init__(self,ppmc):  # 构造函数
        self.ppmc = ppmc

    def guige(self):    # 实例方法    
        pass
        
    # 类方法
    @classmethod        # 装饰器
    def ppsl(cls):      # 约定俗成 cls 类参数 
        cls.pinpai += 1
        print('中烟的品牌数量:' + str(cls.pinpai))
        
    @staticmethod       # 装饰器
    def add(x,y):       # 参数不是self也不是cls
        print('这是一个静态方法')
        print(self.ppmc) # 静态方法里面不能调用 实例变量,这样会报错
        

成员的可见性

  • 可见性:
    • 变量
    • 方法
  • 其他语言区分公开和私有是在变量前面加上:
    • public 公开的
    • private 私有的,外部无法读取或设置
  • Python 变量或方法私有是在 前面加 两个下划线__
    • python并不存在私有机制,加双下划线后,python只是修改了名称,可以通过_类__私有变量 来访问
  • 内部外部
    • 类内部
    • 实例调用

继承

# 父类
class Renlei():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    
    def pr_xinxi(self):
        print(self.name)
      
      
# 子类继承
class Xuesheng(Renlei):
    def __init__(self,name,age,banji):
        self.banji = banji
        #Renlei.__init__(self,name,age) 
        super(Xuesheng,self).__init__(name,age)
    
    def pr_xinxi(self):
        super(Xuesheng,self).pr_xinxi() 
        print(self.name,self.age,self.banji)


zs = Xuesheng('张三',18,'三班')
zs.pr_xinxi()