属性:对象的属性(属性).类的属性(类的字段)
对象属性:属于对象的,不同的对象对应的值可能不一样(对象属性,通过对象来使用)
类的字段:声明在类里面,函数外面。类的属性属于类(类的字段,通过类来使用)
方法:对象方法(方法)、类方法、静态函数、
对象方法:自带一个self参数,一般通过对象去调用
类方法:1,使用@classmethod修饰,
2.自带一个cls参数,并且这个参数不用传参,谁来调用这个方法,cls就指向谁
3.类方法要通过类来调用
静态方法:1.使用@staticmethod修饰
2.没有默认参数
3.静态方法要通过类来调用
怎么选择用对象方法,类方法,静态方法?
if 如果实现函数的功能需要使用对象的属性,就生命成对象方法,
elif 如果实现函数的功能需要使用类的字段或者调用类的方法,就声明成类方法
else 如果实现函数功能,既不需要对象的属性,也不需要类的字段,就声明成静态方法
补充:ctrl+r --- 查找替换
ctrl+f --- 查找
class Person:
# number是类字段
number = 60
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
def hurt_earth(cls):
# cls指向的是调用这个方法的类,cls可以当成类来使用
pt = cls('张三') # 可以使用cls创建对象
print(pt.name) #
print(cls.number)# 可以通过cls来使用类的字段
print('人类破坏环境!!')
# protect_earth是一个静态方法
@staticmethod
def protect_earth():
pt = Person()
print('人类保护地球')
if __name__ == '__main__':
# 1.类的字段要用类来使用
print(Person.number)
# 2.对象的属性要用对象来使用
p1 = Person()
print(p1.name,p1.age)
# 3.对象的方法要通过对象来调用
p1.eat('面条')
p2 = Person('小红')
p2.eat('火锅')
# 4.类方法要通过类来调用
Person.hurt_earth()
# 5.静态方法通过类来调用
Person.protect_earth()
以上代码运行结果如下:
60
0
在吃面条
小红在吃火锅
张三
60
人类破坏环境!!
人类保护地球
练习:写一个班级类,属性:班级名,学生;功能:添加学生,查找学生
写一个类,封装所有和数学运算相关的功能
class Student:
"""学生类"""
def __init__(self,name= '',age = 0):
self.name = name
self.age = age
def __str__(self):
return 'namea:%s age:%d'%(self.name,self.age)
class Class:
"""班级类"""
def __init__(self,name='',students=[]):
self.class_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('Py1805',[])
cls1.add_student()
students = cls1.students
print(cls1,students[0])
# list1 = [1,2,3]
# list2 = []
# list2.appentd(list1)
以上代码运行结果如下:
name:小明
age:23
<__main__.Class object at 0x00000000026EF668> namea:小明 age:23
网友评论