class Dog:
dtype = "京巴" # 属性,类属性,又称为类变量,公共属性,被所有实例所共享
def __init__(self,name,age,sex) -> None:
# 初始化方法/构造方法/构造函数,实例化时进行一些初始化工作
# 实例特有的东西,可以写在这里面
# 实例化时传入的参数,会传入到这里面
print("hhhhh",name,age)
# 如果不把变量与实例进行绑定,变量不会保存到内存中
# 实例属性,实例变量,成员变量,每个实例独享
self.name = name # 把传入的参数和实例进行绑定
self.age = age # 打通构造方法与其他方法之间的变量壁垒
self.sex = sex
def sayhi(self):
# 方法,第一个参数必须是self self,代表实例本身
# 此方法中的参数,与其他方法中的参数无法共享
print(f"Hello,I am a dog,my type is{self.dtype}.My name is {self.name}.My age is {self.age}.")
class Person:
nationality = "China"
def __init__(self,name,age,sex) -> None:
self.name = name
self.age = age
self.sex = sex
def introduce(self):
# 在实例方法中调用类属性要加类名,类.类属性
print(f"Hello!My name is {self.name}.I'm {self.age} years old.I'm {self.sex}.I come from {self.nationality}.")
if __name__=="__main__":
d1=Dog("白云",3,sex = "母狗") # 生成了一个实例
d2=Dog("黑土",5,sex = "公狗")
d1.sayhi() # 实例.方法
Dog.dtype="金毛"
print(Dog.dtype) # 类.属性
print(d1.dtype) # 实例.属性
print(d1.sex,d2.sex) # 实例属性只存在于实例自己的内存里,只能通过实例来调用
print(d1.name,d2.name)
p1=Person("Alex",23,"male")
p2=Person("Bob",23,"male")
p3=Person("Cindy",23,"female")
p4=Person("Danial",23,"male")
p4.nationality="America"
p1.introduce()
p2.introduce()
p3.introduce()
p4.introduce()
实例化时计算机内存做的事: