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 多继承
概念: 子类可以拥有多个父类, 并且具有 所有父类 的属性和方法
来源: http://www.bubuko.com/infodetail-2964397.html