1.slots魔法
class Person:
# __slots__ 的功能就是约束类中的对象中的属性
__slots__ = ('name','age','sex','id')
def __init__(self,name='',age=0):
self.name = name
self.age = age
# 自定义对象的打印格式
"""
id() :是Python的内置函数,功能是获取变量的地址
"""
def __str__(self):
return self.name + ',' + str(self.age) + ',' +str(id(self))
if __name__ == '__main__':
p1 =Person('小王',20)
p1.name = '老王'
p1.sex = '男'
print(p1)
运行结果:
老王,20,34808696
2.类中的方法
属性: 对象的属性(属性)、类的属性(类的字段)
对象属性:属于对象的,不同对象对应的值可能不同
类的字段:声明在类里面,函数外面,类的属性属于类(类的字段,通过类来使用)
方法: 对象方法(方法)、类方法、静态函数
对象方法:自带一个self参数,一般需要对象去调用
类方法:
1.使用@classmethod修饰
2.自带一个cls参数,并且这个参数不用传参,谁来调用cls就指向谁
3.类的方法通过类来调用
静态方法:
1.使用@staticmethod来调用
2.没有默认参数
3.静态方法要通过类来调用
怎么选择对象方法,类方法,静态方法
if 如果实现函数的功能需要使用对应的属性,就声明成对象方法:
下面的推荐使用类方法
elif 如果实现函数的功能需要使用类的字段或者调用类的方法,就声明成类方法
else 如果是想函数功能既不需要函数的属性,也不需要类的字段,就声明静态方法
补充:
Ctrl+r ---->查钊替换
Ctrl+f ---->查找
class Person:
# number是类字段
number = 0
def __init__(self,name ='', age = 0):
# name和age是对象属性
self.name = name
self.age = age
#eat方法是对象方法
def eat(self,food):
print('%s再吃%s'%(self.name,food))
# hurt_earth就是一个类方法
# 写一次就必须 @classmethod 修饰一次
@classmethod
def hurt_earth(cls):
# cls指向的是调用这个方法的类,cls可以当成类来使用
pt = cls('张三') #可以使用cls创建对象
print(pt.name)
print(cls.number) #可以通过cls使用类的字段
print('人类破坏环境')
#protect_esrth是一个静态方法
@staticmethod
def protect_esrth():
print(Person.number)
print('保护地球')
if __name__ == '__main__':
# 1.类的字段类来使用
print(Person.number)
# 2.对象的属性对象来使用
print(Person().name)
print(Person().age)
# 3.对象方法对象调用
p1 =Person('小明')
p1.eat('面条')
p2 = Person('小红')
p2.eat('火锅')
# 4.类方法要通过类来调用
Person.hurt_earth()
# 5.静态方法通过类来调用
Person.protect_esrth()
运行结果:
0
0
小明再吃面条
小红再吃火锅
张三
0
人类破坏环境
0
保护地球
练习:
写一个班级类:属性:班级名,学生,功能:添加学生
class Student:
"""学生类"""
def __init__(self,name='',age=0):
self.name = name
self.age = age
def __str__(self):
return 'name:%s age:%d'%(self.name,self.age)
class Class:
def __init__(self,name='',students = [] ):
self.calss_name = name
self.students = students
def add_student(self):
name = input('name:')
age = input('age:')
#根据创建的信息创建学生对象
stu = Student(name,int(age))
#添加学生
self.students.append(stu)
#创建类的对象
cls1 = Class('py1801')
cls1.add_student()
print(cls1.students[0]) #cls1.students还是一个对象
运行结果
name:陈鹏
age:23
name:陈鹏 age:23
网友评论