定义

  1. class Cat:
  2. def eat(self):
  3. print("%s 吃鱼!" % self.name) #第一参数名建议为self,表示当前对象的引用,类似java中的this
  4. tom = Cat()
  5. tom.name = "Tom" # 临时属性,不建议使用
  6. tom.eat()

初始化方法

  1. class Cat:
  2. def __init__(self):
  3. print("这是一个初始化方法")
  4. self.name = "Tom"
  5. def eat(self):
  6. print("%s 吃鱼!" % self.name)
  7. tom = Cat() # 创建对象时,自动调用初始化方法__init__ 类似java中的构造函数
  8. tom.eat()

实例属性

定义在init方法中的属性为实例属性,即对象属性

  1. class Cat:
  2. def __init__(self,name):
  3. print("这是一个初始化方法")
  4. self.name = name
  5. def eat(self):
  6. print("%s 吃鱼!" % self.name)
  7. tom = Cat("Tom") # 初始化方法 传参
  8. tom.eat()

类属性和类方法

  1. class Dog(object):
  2. count = 0 # 类属性
  3. @classmethod # 类方法 访问类属性时,定义类方法
  4. def run(cls): # 第一个参数为类对象引用
  5. print(cls.count)
  6. @staticmethod # 静态方法 既不访问实例属性,也不访问类属性,就可以定义静态方法
  7. def hello():
  8. print("hhh")
  9. print(Dog.count)
  10. Dog.run()
  11. Dog.hello()

私有属性和方法

属性,或方法 只能在内部访问,以两个下划线开头的为私有属性和方法

  1. class Cat:
  2. def __init__(self):
  3. self.__age = 18
  4. def __hello(self):
  5. print("%s 私有" % self.__age)
  6. tom = Cat()
  7. print(tom.__age) # 报错 __属性,或__方法 只能在内部访问,外部不能访问,注意:__demo__ 不是私有的,后面如果有__就不是私有的
  8. tom.__hello() # 报错,
  9. # 实际上python没有真正意义上的私有属性和方法,python解析器在处理私有属性和方法时,会在属性和方法前
  10. # 前加上 _类名,所有外部访问时,可以通过 _类名__属名性 或 _类名__方法名 访问
  11. print(tom._Cat__age)
  12. tom._Cat__hello()

魔术方法

image.png

init

  1. class Cat:
  2. def __init__(self,name):
  3. print("这是一个初始化方法")
  4. self.name = name
  5. def eat(self):
  6. print("%s 吃鱼!" % self.name)
  7. tom = Cat("Tom") # 初始化方法 传参
  8. tom.eat()

del

  1. class Cat:
  2. def __init__(self, name):
  3. print("这是一个初始化方法")
  4. def __del__(self):
  5. print("我去了") # 对象被销毁时,会调用该方法
  6. tom = Cat("Tom")
  7. del tom # 手动销毁对象,
  8. print("-----")

str

repr类似,如果都定义了,会调用str

  1. class Cat:
  2. def __str__(self): # 类似java中的toString方法
  3. return "我是小猫"
  4. tom = Cat()
  5. print(tom)

setitem

image.png

eq

== 会调用该方法:默认比较内存地址,返回该方法的返回值
image.png

gt

没有该方法 会报错
image.png

ge

image.png

add

image.png
image.png
两个对象 + 会调用add方法

int

image.png
类型转换:int(p),会调用对象的int方法

内置属性

继承

定义

  1. class Animal(object): # 3.x默认基类为object,而2.x 不是,需要手动写,为了保证兼容性,建议都写(object)
  2. def eat(self):
  3. print("吃")
  4. def run(self):
  5. print("跑")
  6. def sleep(self):
  7. print("sleep")
  8. class Dog(Animal): # 继承父类
  9. def bark(self):
  10. print("狗 叫")
  11. def run(self):
  12. print("狗 跑") # 重写方法
  13. def sleep(self):
  14. # 调用父类的方法 2.x版本使用:Animal.sleep(self),3.x也支持
  15. super().sleep()
  16. print("狗 slepp")
  17. dog = Dog()
  18. dog.eat()
  19. dog.run()
  20. dog.bark()
  21. dog.sleep()