python类 知识学习

1.容易混淆的定义

实例变量前需要加self.,表明这个变量属于实例,实例变量通过“对象.实例变量”的方法进行访问
同样在实例方法中,也需要在第一个参数中填入self,表明这个方法属于实例
而类变量可以直接定义在类中,类变量的访问需要用“类名.类变量”
类方法则需要在前加上@classmethod装饰器进行说明,它不属于个体实例,它的第一个参数不是self,而是类本身,既可以写cls,也可以用类本身的名字来作为第一个参数,但是类方法中不能调用实例变量

class Account():
    index_number = 5 # 类变量
    def __init__(self):
        self.index_number = 5 # 实例变量
        
    def show_index(self): # 实例函数
        print(self.index_number)
        print(index_number) # 这么写是错误的
        
    @classmethod
    def show_classindex(cls): # 类方法
        print(cls.index_number)
        print(self.index_number) # 这么写是错误的
        return 0
    
a = Account()
Account.show_classindex() # 类方法的使用
a.show_index() # 实例方法的使用

总而言之,实例与类之间是不能互相调用的

2.封装性

1.私有变量/方法

定义私有的方式是在变量和方法名前加两个下划线
__index_number
def __show_index(self):
这样该变量/方法只能在类内访问
但是实际上这种定义方法是一种弱私有的方法,python会将该变量/方法的名字自动改为_classname__index_number,在外部使用时,只要用这个变量名就可以进行更改
如在上面的代码中新增私有变量

self.__index_number = 10

print(a._Account__index_number)

即可访问

那么此时可以使用强私有方法

self.__index_number__ = 10

这样在类之外便无法对其进行访问

2.类属性

通过装饰器@property可以将实例方法改变为类属性,这样便可以通过实例方法方便地改变私有变量的值

class Account():
    def __init__(self, index_number):
        self.__index_number = index_number
        
    @property
    def pri(self): # 类属性的定义
        return self.__index_number
    
    @pri.setter # 类属性设置方法
    def pri(self, index_number):
        self.__index_number = index_number
        
    @pri.deleter # 析构函数
    def pri(self):
        del self.__index_number
    
a = Account(11)
a.pri = 15
print(a.pri)
3.继承性

python中子类可以继承父类除了私有变量和方法之外的所有变量和方法

class Father():
	def __init__(self, name):
		self.name = name
	def call_father_name(self):
		print(self.name)

class Son(Father): # 继承父类
	def __init__(self, name, age):
		super().__init__(name) # 调用父类构造方法
		self.age = age
	def call_father_age(self):
		print(self.age)

father = Son('Tony', 43)
father.call_father_name()
father.call_father_age()
print(father.name)

所以在构造子类方法时,会先构造父类方法,然后继承父类中的变量和方法,之后便可以对这些变量和方法进行调用

python中子类是可以继承多个父类的,继承时会从左到右进行继承,对于同名变量和方法优先继承左边的

子类如果定义了与父类相同的方法名,子类方法会重写(override)父类的同名方法

4.多态性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值