方法中必须有一个参数self,而且它是参数列表中的第一个参数
由同一个类可以生成很多个对象,每一个对象,都有一个专属的self,代表这个对象自身
class Person(): money=10086 def say_hello(self): print("hello!")
对象名 = 类名()
class Person(): money=200000000 def say_good(self): print("Good Luck!") xiaoxu = Person() print(xiaoxu.money) xiaoxu.say_good()
运行结果:
PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person.py" 200000000 Good Luck!
class Person(): money=200000000 def say_good(self): print("Good Luck!") xiaoxu = Person() #创建对象之后,动态添加对象属性 xiaoxu.major="computer" print("xiaoxu’s major is",xiaoxu.major)
运行结果:
PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person2.py" xiaoxu’s major is computer
该动态添加的实例属性,它只属于xiaoxu自己,如果重新创建其他的Person()对象,是没有这个属性的。
例如在以上的代码前提下,在末尾添加上这两行代码再次进行测试:
laowang = Person() print(laowang.major)
运行结果:
PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person3.py" xiaoxu’s major is computer Traceback (most recent call last): File "g:\Codes\PyStudy\02\Person3.py", line 17, in <module> print(laowang.major) AttributeError: 'Person' object has no attribute 'major'
class Person(): # 类属性,所有的示例共同享有 money=200000000 def say_good(self): print("Good Luck!") xiaoxu = Person() laowang = Person() print(Person.money) print(xiaoxu.money) print(laowang.money) print("------------分割线-------------") # 修改类属性,所有实例的值都会发生变化 Person.money=400000 print(Person.money) print(xiaoxu.money) print(laowang.money) print("------------分割线-------------") # 小徐自行创建的实例属性,它就不会被共享 xiaoxu.money=1200000 print(Person.money) print(xiaoxu.money) print(laowang.money)
del 对象名
class Person(): money=1200000 def say_good(self): print("Good Luck!") xiaoxu = Person() xiaoxu.major="computer" print("xiaoxu’s major is",xiaoxu.major) del xiaoxu print(xiaoxu.major)
执行结果:
PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person5.py" xiaoxu’s major is computer Traceback (most recent call last): File "g:\Codes\PyStudy\02\Person5.py", line 11, in <module> print(xiaoxu.major) NameError: name 'xiaoxu' is not defined
class Person: # 构造函数 -- __init__() # 在创建对象时,用来完成初始化操作 def __init__(self,name,age,gender="男"): self.name=name self.age=age self.gender=gender # 析构函数 -- __del__() # 在清除对象时,回收和释放对象所占用的资源 def __del__(self): print("Bye bye - from",self.name) def printInfo(self): print("姓名:",self.name,"年龄:",self.age,"性别:",self.gender) xiaoxu=Person("小徐",21) xiaofang=Person("小芳",18,"女") xiaoxu.printInfo() xiaofang.printInfo() del xiaoxu del xiaofang
运行结果:
PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person6.py" 姓名: 小徐 年龄: 21 性别: 男 姓名: 小芳 年龄: 18 性别: 女 Bye bye - from 小徐 Bye bye - from 小芳
""" 类方法: 可以通过类名或对象名调用。 不能访问实例属性,但可以访问类属性。 静态方法: 可以通过类名或对象名调用。 不能访问实例属性,也不能直接访问类属性。 但是可以通过类名引用类属性。 """ class Person(): @classmethod def eat(self,name): self.name = name print("吃了两碗米饭的",self.name) @staticmethod def drink(): print("一口气喝了1.5升的有点甜") laowang = Person() laowang.eat("我") laowang.drink()
运行结果:
PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\Person7.py" 吃了两碗米饭的 我 一口气喝了1.5升的有点甜
class Person(): money=10086 def say_hello(self): print("hello!") # 继承 - Teacher是Person的子类 # 子类能够继承父类中所有非私有的成员变量和成员函数 class Teacher(Person): pass amy = Teacher() print(amy.money) amy.say_hello()
运行结果:
PS G:\Codes\PyStudy> python -u "g:\Codes\PyStudy\02\tempCodeRunnerFile.py" 10086 hello!