一、类属性:定义在类中函数外的属性;self代表类的实例。
其中 number属于类属性,name、age属于实例属性;实例属性一般在初始函数中定义。
class people:
number=300 #类属性
def __init__(self,name,age):#初始化方法 左右两个下划线
self.name=name
self.age=age
def display(self):
print('number=:',people.number)
def display_name(self):
print(self.name)
def display_age(self):
print(self.age)
其中self一定要写。
二、实例化和调用类方法
#实例属性只能通过实例名访问
shili=people('yuyuanyuan',80)#类方法的调用
print(shili.age)
print("-----------------------------")
print(shili.number)
print("-----------------------------")
print(shili)
print("-----------------------------")
shili.display()#调用类方法
shili. display_age()
shili.name = 'hello' #属性可以改变
print(shili.name)
结果:
python中除了可以通过类名称访问类属性,还可以动态地为类和对象添加属性、也可以修改类属性
people.arm = '有两个梨涡'
print(shili.arm)
#结果:有两个梨涡
类的创建:
class Love:
"节日类"
def __init__(self,name,love):
print(name)
print(love)
love='love'
name='you'
yyy=Love(love,name)
结果:
三、类的继承
#子类的定义
class Parent:
number=100
def __init__(self):
print("调用父类构造函数")
def parentM(self):
print('调用父类方法')
def newM(self):
print('另一个父类新的方法')
class child(Parent):
number=200
def __init__(self):
print('调用子类构造函数')
def childM(self):
print('调用子类方法')
def newM(self):
print('若函数名字相同,则子类重写此方法')
(1)子类实例应用
#子类实例应用
c = child() #生成子类实例
c.childM() #调用子类方法
c.parentM() #调用父类方法,此方法子类中没有。
c.newM() #子类和父类都有这个方法,那就调用子类的方法。
结果:
四、访问限制
在类的内部可以定义属性和方法,而在类的外部则可以直接调用属性或方法来操作数据,从而隐藏了类内部的复杂逻辑。但python并没有对属性和方法的访问权限进行限制。为了保证类内部的某些属性或方法不被外部所访问,可以在属性或方法名前添加双下划线或首尾添加双下划线,从而限制访问权限。
#1.首尾双下划线表示定义特殊方法,一般是系统定义名字,如__init__()
#2.双下划线表示private(私有)类型的成员,只允许定义该方法的类本身进行访问,而不能通过类的实例进行访问,但可以通过“类的实例名._类名__***”方式访问。
class People: # 创建一个人类
"""人类"""
__eye = '有两只爱笑的眼睛'
def __init__(self): # 构造方法
print('__init__():', People.__eye) # 在实例方法中访问私有属性
man = People() # 创建People类的实例
print('加入类名:', man._People__eye) # 私有属性,可以通过"实例名._类名__xxx"方式访问
print('直接访问:', man.__eye) # 私有属性不能通过实例名访问,出错
五、静态方法
静态方法是定义在类上的方法,它可以通过类或者类的实例来调用。静态方法使用@staticmethod装饰器进行标识,它不需要类或实例作为第一个参数。与类方法不同,静态方法不能访问类或实例的属性和方法
class MyClass:
@staticmethod
def my_static_method(arg1, arg2):
print("Static method called with args:", arg1, arg2)
MyClass.my_static_method(1, 2)
# 输出:Static method called with args: 1 2
obj = MyClass()
obj.my_static_method(3, 4)
# 输出:Static method called with args: 3 4