1. __init__方法
# 1. 为对象在内存 中分配空间 -- 创建对象 # 2. 为对象属性 设置初始值 -- 初始化方法(init) # 3. __init__: 专门用来定义一个类 具有哪些属性的方法! class Cat: def __init__(self): # self.属性名 = 属性的初始值 self.name = "TOM" # print("这是一个初始化方法") def eat(self): print("%s 吃鱼" % self.name) # 使用类名()创建对象的时候会自动调用初始化方法__init__ tom = Cat() print(tom.name)
TOM 我去了
TOM
2. 利用参数设置属性初始值
# 1. 为对象在内存 中分配空间 -- 创建对象 # 2. 为对象属性 设置初始值 -- 初始化方法(init) # 3. __init__: 专门用来定义一个类 具有哪些属性的方法! class Cat: def __init__(self, new_name): # self.属性名 = 属性的初始值 self.name = new_name # print("这是一个初始化方法") def eat(self): print("%s 吃鱼" % self.name) # 使用类名()创建对象的时候会自动调用初始化方法__init__ tom = Cat("TOM") print(tom.name) lazy_Cat = Cat("Lazy") lazy_Cat.eat()
3. __del__方法
class Cat:
def __init__(self, new_name):
# self.属性名 = 属性的初始值+
self.name = new_name
print("%s 我来了" % self.name)
def eat(self):
print("%s 吃鱼" % self.name)
def __del__(self):
print("%s 我去了" % self.name)
# 使用类名()创建对象的时候会自动调用初始化方法__init__
tom = Cat("TOM")
print(tom.name)
print("-"*50)
TOM 我来了
TOM
--------------------------------------------------
TOM 我去了
4. __str__方法
# -*- coding: utf-8 -*- """ Created on Fri Feb 22 16:35:56 2019 @author: Douzi """ class Cat: def __init__(self, new_name): # self.属性名 = 属性的初始值+ self.name = new_name print("%s 我来了" % self.name) def eat(self): print("%s 吃鱼" % self.name) def __del__(self): print("%s 我去了" % self.name) def __str__(self): # 必须返回一个字符串 return "我是小猫[%s]" % self.name # 使用类名()创建对象的时候会自动调用初始化方法__init__ tom = Cat("TOM") print(tom)
TOM 我来了
我是小猫[TOM]
TOM 我去了
5. 身份运算符
用于 比较 两个对象的 内存地址 是否一致—是否是对同一个对象的引用
- 在Python中针对 None 比较时,建议使用 is 判断
- is:例,x is y, 类似 id(x) == id(y))
- is not:例,x is not y, 类似 id(x) != id(b)
注意: is: 判断两个对象的引用是否一致; ==:判断两个对象的值是否一样
6. 私有属性和私有方法: __secret
class Women: def __init__(self, name): self.name = name self.__age = 18 def __secret(self): print("%s 的年龄是 %d" % (self.name, self.__age)) def say(self): self.__secret() xiaofang = Women("小芳") # 私有属性不能被直接访问 # print(xiaofang.age) # 在对象的方法内部可以访问 # 私有方法同样不可以在外界方法 #xiaofang.__secret() xiaofang.say()
7. 伪私有属性和私有方法(不推荐使用)
class Women: def __init__(self, name): self.name = name self.__age = 18 def __secret(self): print("%s 的年龄是 %d" % (self.name, self.__age)) def say(self): self.__secret() xiaofang = Women("小芳") # 伪私有方法 print(xiaofang._Women__age) xiaofang._Women__secret()
8. 继承
8.1 单继承
8.1.1. 重新实现父类方法
8.1.2. 调用父类方法: super().funName()
# -*- coding: utf-8 -*- """ Created on Fri Feb 22 19:23:57 2019 @author: Douzi """ class Animal: def eat(self): print("吃") def drink(self): print("喝") def run(self): print("跑") def sleep(self): print("睡") class Dog(Animal): def bark(self): print("www") class XiaoTianQuan(Dog): def fly(self): print("飞") def bark(self): print("叫的跟神一样") # 使用super(). 调用原本在父类中封装的方法 super().bark() # 父类名.方法(self). 调用父类中封装方法 Dog.bark(self) dog = Dog() dog.eat() xiaotian = XiaoTianQuan() xiaotian.bark()
吃
叫的跟神一样
www
www
注意:
子类对象 不能 在自己方法内部 直接 访问父类的私有属性或私有方法(可以通过父类公共方法访问)
子类对象 在外界可以访问到父类的公有属性和方法
8.2 多继承
概念:子类可以拥有多个父类,并且具有 所有父类 的属性和方法
class A: def test(self): print("A class") class B: def demo(self): print("B demo") class C(A, B): pass c = C() c.test() c.demo()
注意:父类存在同名属性和方法,少用多继承