Python复习笔记(五)面向对象

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()

注意:父类存在同名属性和方法,少用多继承

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/douzujun/p/10420297.html
今日推荐