定义
class Cat:def eat(self):print("%s 吃鱼!" % self.name) #第一参数名建议为self,表示当前对象的引用,类似java中的thistom = Cat()tom.name = "Tom" # 临时属性,不建议使用tom.eat()
初始化方法
class Cat:def __init__(self):print("这是一个初始化方法")self.name = "Tom"def eat(self):print("%s 吃鱼!" % self.name)tom = Cat() # 创建对象时,自动调用初始化方法__init__ 类似java中的构造函数tom.eat()
实例属性
定义在init方法中的属性为实例属性,即对象属性
class Cat:def __init__(self,name):print("这是一个初始化方法")self.name = namedef eat(self):print("%s 吃鱼!" % self.name)tom = Cat("Tom") # 初始化方法 传参tom.eat()
类属性和类方法
class Dog(object):count = 0 # 类属性@classmethod # 类方法 访问类属性时,定义类方法def run(cls): # 第一个参数为类对象引用print(cls.count)@staticmethod # 静态方法 既不访问实例属性,也不访问类属性,就可以定义静态方法def hello():print("hhh")print(Dog.count)Dog.run()Dog.hello()
私有属性和方法
属性,或方法 只能在内部访问,以两个下划线开头的为私有属性和方法
class Cat:def __init__(self):self.__age = 18def __hello(self):print("%s 私有" % self.__age)tom = Cat()print(tom.__age) # 报错 __属性,或__方法 只能在内部访问,外部不能访问,注意:__demo__ 不是私有的,后面如果有__就不是私有的tom.__hello() # 报错,# 实际上python没有真正意义上的私有属性和方法,python解析器在处理私有属性和方法时,会在属性和方法前# 前加上 _类名,所有外部访问时,可以通过 _类名__属名性 或 _类名__方法名 访问print(tom._Cat__age)tom._Cat__hello()
魔术方法
init
class Cat:def __init__(self,name):print("这是一个初始化方法")self.name = namedef eat(self):print("%s 吃鱼!" % self.name)tom = Cat("Tom") # 初始化方法 传参tom.eat()
del
class Cat:def __init__(self, name):print("这是一个初始化方法")def __del__(self):print("我去了") # 对象被销毁时,会调用该方法tom = Cat("Tom")del tom # 手动销毁对象,print("-----")
str
和repr类似,如果都定义了,会调用str
class Cat:def __str__(self): # 类似java中的toString方法return "我是小猫"tom = Cat()print(tom)
setitem
eq
gt
ge
add
int

类型转换:int(p),会调用对象的int方法
内置属性
继承
定义
class Animal(object): # 3.x默认基类为object,而2.x 不是,需要手动写,为了保证兼容性,建议都写(object)def eat(self):print("吃")def run(self):print("跑")def sleep(self):print("sleep")class Dog(Animal): # 继承父类def bark(self):print("狗 叫")def run(self):print("狗 跑") # 重写方法def sleep(self):# 调用父类的方法 2.x版本使用:Animal.sleep(self),3.x也支持super().sleep()print("狗 slepp")dog = Dog()dog.eat()dog.run()dog.bark()dog.sleep()


