python--类和对象+类属性+实例属性+函数在类的调用
- 类属性--创建、访问(类、类实例)
- 实例属性--创建、访问(类实例)
- 初始化实例属性__init__
- 私有属性
- 伪私有属性(Pseudo-private Attributes)
- 私有属性(Private Attributes)
- 函数调用拓展
类属性–创建、访问(类、类实例)
类属性:定义在类里面,函数外面
访问:类.属性名称 实例.类属性名称`
class Dog:
name='小黑' # 类属性
__dog_color = '白色' # 类私有属性
def __init__(self):
self.color = '黑色' #实例属性
self.__kind='中华田园犬' # 实例私有属性
print('初始化方法自动调用了吗???')
print(self)
# 实例方法
def eating(self):
print(Dog.name,'正在吃骨头。。。')
print('狗的颜色',self.color)
self.sleep()
if __name__ == '__main__':
# 类实例化
# Dog 类
Dog().eating()
a=Dog() #类实例
a.eating()
#实例.类属性名称
print(a.name)
#类外面:类实例.名称
print(a.color)
实例属性–创建、访问(类实例)
实例属性:
定义在__init__(初始化方法,可有可无)
中,self.xxxx
访问:实例属性名称
在类里面:self.xxxx
类外面:类实例.名称
实例属性需要实例化之后才能访问
class Teacher:
age = 20
def __init__(self, name, age, subject):
# 实例化属性 name、age 和 subject
self.name = name
self.age = age
self.subject = subject
t = Teacher('Dzreal', 25, 'PE')
print(t.age) # 25
del t.age # 删除实例属性后,自动调用类属性
print(t.age) # 20
初始化实例属性__init__
init__是用来完善对象的,在对象生成之后调用
实例属性:定义在__init(初始化方法,可有可无)中,self.xxxx
class Teacher:
def __init__(self, name, age, subject):
self.name = name
self.age = age
self.subject = subject
私有属性
并不是所有的属性都可以被外部访问,不能被外部访问的属性就叫私有属性
伪私有属性(Pseudo-private Attributes)
伪私有属性是通过给属性名添加单下划线 _前缀来实现的。
可以访问,但不要随意访问
私有属性(Private Attributes)
私有属性是通过给属性名添加双下划线 __ 前缀来实现的。
一般不可访问,强行访问的话,可以通过 实例._类名__attrname来访问
class Teacher:
def __init__(self, name, age, subject):
# 定义一个私有属性,名称为 _name
self.__name = name
# 定义一个公有属性,名称为 age
self.age = age
# 定义一个受保护的属性,名称为 _subject
self._subject = subject
def get_fake_private(self):
# 打印受保护的属性
print(self._subject)
def get_private(self):
# 打印私有属性
print(self.__name)
# 实例化 Teacher 对象
t = Teacher('Dzreal', 25, 'PE')
# 通过实例方法访问私有属性
t.get_fake_private() # PE
t.get_private() # Dzreal
# 直接访问私有属性
print(t._subject) # PE
print(t._Teacher__name) # Dzreal
print(t.__name) # 报错 AttributeError: 'Teacher' object has no attribute '__name'
函数调用拓展
第一种:函数名称()
第二种:在类的内部,self.函数名称()
第三种:在类的外面,类实例.函数名称() == 类().函数名称()