我们这里再来一个类的例子,这个例子说的是在对象中定义方法和调用方法
class Person(): # Person 类名 def __init__(self, name, sex, job, level, hp, weapon, ad): self.name = name # 对象属性/实例变量 self.sex = sex self.job = job self.level = level self.hp = hp self.weapon = weapon self.ad = ad def cuo(self): # 方法,又是一个必须传的参数----》self对象,定义方法的时候self就会作为参数自动的传入 print(\'wahaha\', self) # wahaha <__main__.Person object at 0x0000017FF16F95C8> # 所以我们就可以获取到每一个属性,或者去操作每一个属性,用我们定义的函数去操作每一个属性的值 print(\'wahaha\', self.name) # wahaha alex print(\'wahaha\', self.name, self.hp, self.ad) # wahaha alex 250 1 alex = Person(\'alex\', \'不详\', \'搓澡工\', 0, 250, \'搓澡巾\', 1) # 对象\实例 类名()---》实例化过程 alex.cuo() print(alex) # <__main__.Person object at 0x0000017FF16F95C8> self的地址和alex的地址是一模一样的,指向的是同一个事物,在实际的开发的过程中,如果实在不知道具体是什么逻辑,就直接认为self和实例化对象是一样的。 class Dog(): # Person 类名 def __init__(self, name, blood, aggr, kind): self.dog_name = name self.hp = blood self.ad = aggr self.kind = kind def tiao(self): print(self.__dict__) littleDog = Dog(\'小白\', 5000, 249, \'萨摩耶\') littleDog.tiao() # {\'dog_name\': \'小白\', \'hp\': 5000, \'ad\': 249, \'kind\': \'萨摩耶\'} littleDog1 = Dog(\'小金\', 6000, 266, \'金毛\') littleDog1.tiao() # {\'dog_name\': \'小金\', \'hp\': 6000, \'ad\': 266, \'kind\': \'金毛\'}在这里我们进行一个知识点的总结:
zhouqian = Person(),,如果实例化对象,我们没有传入参数的时候,这个时候,我们会报错。报错的信息如下:init() takes 1 positional argument but 8 were given
那么这些实际参数应该怎么传入到这个类中呢?
首先,我们要知道,在实例化的时候,我们在Person()中传入的参数,会被放到__init__方法中。
所以我们要接受这些参数,我们要在__init__方法中接受这些参数。将实际参数的值和对象(self)绑定在一起。
静态变量(静态属性)和实例化变量(实例化属性)的值可以进行修改、增加、删除、增加
类中方法的调用:类.函数名() 对象。方法名()
类属性的补充
一:我们定义的类的属性到底存到哪里了?有两种方式查看 dir(类名):查出的是一个名字列表 类名.__dict__:查出的是一个字典,key为属性名,value为属性值 二:特殊的类属性 类名.__name__# 类的名字(字符串) 类名.__doc__# 类的文档字符串 类名.__base__# 类的第一个父类(在讲继承时会讲) 类名.__bases__# 类所有父类构成的元组(在讲继承时会讲) 类名.__dict__# 类的字典属性 类名.__module__# 类定义所在的模块 __main__ 类名.__class__# 实例对应的类(仅新式类中) # <class \'type\'>
python是一切皆对象,修改列表、字典、中的某个值,或者是对象的某一个属性,都不会影响这个对象、字典、列表所在的内存空间。
实例化所经历的步骤
1.类名() 之后的第一件事儿:开辟一块儿内存空间
2.调用__init__方法,把空间的内存地址作为self参数传递到函数内部
3.所有的这一个对象需要使用的属性都需要和self关系起来
4.执行完init中的逻辑之后,self变量会自动的被返回到调用处(发生实例化的地方)----self和实例化对象指向的是同一个