参考资料:https://blog.youkuaiyun.com/m0_46610658/article/details/141021328
1.类里的属性(成员变量)
1.1.类属性:类属性就是这个类所拥有的属性(变量),类属性被该类的所有实例对象所共有。类属性包括公有类属性和私有类属性。公有的类属性,在类外可以通过类名或实例对象来访问。
类属性不属于任何一个实例对象,而是属于类本身。但所有的实例对象可以共享同一个类属性。当你修改类属性时,在所有的实例对象中都能看到类属性的变化。
新建一个文件:person.py,输入如下内容
class PERSON: #类名要大写
age="18" #公有类属性
__age_add="99" #私有类属性
新建另一个文件:test.py,输入如下内容
import person
cla=person.PERSON #类
obj=person.PERSON() #类的实例对象
print(cla.age)#通过类名调用类属性
print(obj.age)#通过实例对象调用类属性
1.2.实例属性:实例属性是定义在构造方法__init__内部的.实例属性是该类的实例对象所拥有的,类对象无法拥有(通过类名无法访问实例属性)。实例属性在类的每一个实例对象中独立存在,每个实例对象都有自己的实例属性,互不影响。
新建一个文件:person.py
class PERSON: #类名要大写
age="18" #类属性
def __init__(self,name:str,age): #实例方法
#self代表实例对象本身
#实例属性,注意:init英文不要拼错,init两边分别有两条下划线,如果写成一条下划线则无法识别为实例属性
self.name=name #第一个实例属性
self.age=age #第二个实例属性
新建另一个文件:test.py
import person
cla=person.PERSON #类
obj=person.PERSON("bella","20") #类的实例对象
#print(cla.name) #使用类去调用实例属性会报错
print(obj.name) #使用实例去调用实例属性
1.2.1.补充,在定义的类里实例化对象
新建一个文件:person.py
class PERSON: #类名要大写
age="18" #类属性
def __init__(self,name:str,age): #实例属性,注意:init英文不要拼错,init两边分别有两条下划线,如果写成一条下划线则无法识别为实例属性
self.name=name #第一个实例属性
self.age=age #第二个实例属性
person1=PERSON("bella","21")
print(person1.name)
print(person1.age)
2.类里的方法(成员方法)
2.1.类方法:类方法用@classmethod标志,方法的第一个参数用cls,代表的类本身。可以通过类对象和实例对象去访问
新建一个文件person.py
class PERSON: #类名要大写
age="18" #公有类属性
__age_add='99' #私有类属性
@classmethod
def get_age(cls)->str: #类方法用@classmethod标志,方法的第一个参数用cls,代表的类本身。可以通过类对象和实例对象去访问
return f"age={cls.age},agg_add={cls.__age_add}"
新建一个文件test.py
import person
cla=person.PERSON #类
obj=person.PERSON() #类的实例对象
print(cla.get_age())
print(obj.get_age())
输出结果:
age=18,agg_add=99
age=18,agg_add=99
2.2.实例方法
init方法是特殊实例方法。实例方法不需要用@来标志,实例方法第一个参数必须为self(代表实例本身)。
新建文件:person.py
class PERSON:
age="18" #类属性
def __init__(self,name:str,age): #实例方法(特殊的实例方法,其实是构造方法),注意:init英文不要拼错,init两边分别有两条下划线,如果写成一条下划线则无法识别为实例属性
#self代表实例对象本身
self.name=name #第一个实例属性
self.age=age #第二个实例属性
def print_age(self):#另一个实例方法,实例方法不需要用@来标志,实例方法第一个参数必须为self(代表实例本身)。
print(self.age)
新建文件:test.py
import person
obj=person.PERSON('bella','21') #类的实例对象
print(obj.print_age())#实例对象调用实例方法
执行结果:21
2.3.静态方法:静态方法用@staticmethod标志,方法不需要传参(cls和self都不需要),静态方法调用类属性时使用用类本身来调用。
静态方法可以被类对象和实例对象调用,但一般用类对象调用,为了强调静态方法的独立性
新建文件:peron.py
class PERSON:
age="18"
__age_add='99'
@staticmethod
def get_age()->str: #静态方法用@staticmethod标志,方法不需要传参(cls和self都不需要),静态方法调用类属性时使用用类本身来调用。
#静态方法可以被类对象和实例对象调用,但一般用类对象调用,为了强调静态方法的独立性
return f"age={PERSON.age},agg_add={PERSON.__age_add}"
新建文件:test.py
import person
cla=person.PERSON #类
obj=person.PERSON() #类的实例对象
print(cla.get_age())
print(obj.get_age())