Python 小白入门学习笔记 (五)

文章目录

  • 5.面向对象
    • 5.1面向对象和面向过程
    • 5.2 Python 实现类:
      • 5.2.1 创建类
      • 5.2.2利用类创建实例对象
      • 5.2.3 调用类方法,通过实例对象实现
    • 5.3 动态添加、删除临时属性
    • 5.4 __ str __方法
    • 5.5 继承
    • 5.6 重写父类的方法,调用父类的方法
    • 5.7 私有属性
    • 5.8 私有方法
    • 5.9 私有属性和方法的强行获取
    • 5.10 类属性
    • 5.11 类方法
    • 5.12 静态属性

5.面向对象

5.1面向对象和面向过程

面向过程:根据事情逻辑从上到下写代码
面向对象:将数据和函数一起封装,减少重复代码

5.2 Python 实现类:

5.2.1 创建类

class Dog(object):
    def __init__(self, name, age):
        self.Name = name
        self.Age = age
        
    def run(self):
        print('这只狗在跑')

    def bark(self):
        print('这只狗在叫')

5.2.2利用类创建实例对象

if __name__ == '__main__':
    dog1 = Dog('大黄', 2)

5.2.3 调用类方法,通过实例对象实现

dog1.run()
dog1.bark()

5.3 动态添加、删除临时属性

dog1.price = 50
# 临时添加属性
print(dog1.__dict__) # 查看属性字典
# 删除属性
del dog1.price
print(dog1.__dict__) 

输出结果:

{'price': 50}
{}

5.4 __ str __方法

def __str__(self):
    return '这只狗的名字叫%s, 它%s岁了。' % (self.Name, self.Age)

输出结果:

dog1 = Dog('大黄', 2) # 实例化
print(dog1) # 输出显示
# 输出结果为:这只狗的名字叫大黄, 它2岁了。

5.5 继承

  • 当类之间有很多相同的功能时,提取这些共同的功能做成父类(基类)。

  • 子类(派生类)在继承父类的时候,在定义类的时候,括号内需要填写父类的名字。

  • 父类的属性和方法,子类可以继承并使用。

class Animal(object):
    def eat(self):
        print('我很饿,我需要食物')
       
class Dog(Animal): # 继承
    pass
if __name__ == '__main__':
    dog1 = Dog()
    dog1.eat()  # 我很饿,我需要食物

5.6 重写父类的方法,调用父类的方法

class Animal(object):
    def eat(self):
        print('我很饿,我需要食物')

class Dog(Animal):
    def eat(self):
        super().eat()  # 调用父类的方法
        print('我要去吃早上还没吃完的骨头了')

if __name__ == '__main__':
    dog1 = Dog()
    dog1.eat()
    # 输出结果为:
    # 我很饿,我需要食物
    # 我要去吃早上还没吃完的骨头了

5.7 私有属性

类的私有属性:只能其本身访问,子类也不能访问
类的保护变量:保护变量只能允许其本身与子类进行访问

class ChickenSoup(object):
    def __init__(self):
        self.name = '爷爷祖传的秘方'  # 公有属性
        self.__money = '10亿元RMB'  # 私有属性
        self._price = '一份10元'  # 保护属性
        
    def cookstyle(self):
        print('爷爷挣的钱', self.__money)

5.8 私有方法

class ChickenSoup(object):
    def __init__(self):
        self.name = '爷爷祖传的秘方'  # 公有属性
        self.__money = '10亿元RMB'  # 私有属性
        self._price = '一份10元'  # 保护属性

    ''' 私有方法 '''
    def __cookstyle(self):
        print('爷爷挣的钱', self.__money)
  • 私有的属性,不能通过对象直接访问,但是能通过类方法访问。
  • 私有的方法,不能通过对象直接访问
  • 私有的方法不能被子类继承,也不能访问
  • 一般情况下,私有的属性和方法都不对外公布,用来做内部的操作,起到保护作用

5.9 私有属性和方法的强行获取

A = ChickenSoup()
# 强行获取私有属性
print(A._ChickenSoup__money)
# 强行获取私有方法
A._ChickenSoup__cookstyle()

输出结果

10亿元RMB
爷爷挣的钱 10亿元RMB

5.10 类属性

class Person(object):
    number = 0  # 类属性

    def __init__(self, name):
        self.name = name  # 公有属性


A = Person('alex')
print(A.name)  # 调用实例属性
print(A.number)  # 通过实例调用类属性
print(Person.number)  # 通过类调用类属性

类属性:类对象拥有的属性,被类对象和实例对象共有,内存中只存在一份副本,如果时公有类属性,可以通过类对象和实例对象访问

5.11 类方法

一般都是通过类方法来得到类的私有属性值

class Person(object):
    __Gender = '男'
    @classmethod
    def run(cls):
        print('性别为%s' % cls.__Gender)


A = Person()
Person.run()
A.run()
  1. 第一个参数一般都是写cls
  2. 加上装饰器,@classmethod 标注为类方法
  3. 类方法能通过类对象调用
  4. 类方法能通过实例对象调用

5.12 静态属性

@staticmethod
def eat():
    print('吃')
  1. 使用装饰器@staticmethod
  2. 就是类里面的普通函数,不用传递self和cls,也可以被实例对象调用

你可能感兴趣的:(python基础)