面向对象的琐碎特性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象的琐碎特性相关的知识,希望对你有一定的参考价值。

好久没更新了,这段时间忙成狗了,做的却是没多大意义的Work,不说了,为了解决人生苦短的问题,继续奔腾着。。

1. 类的私有属性

 1 class Person:
 2     def __init__(self, name, age):
 3         self.name = name
 4         self.__age = age  # 私有属性
 5 
 6     # 给私有属性赋值,需要专门写一方法
 7     def set_new_age(self, new_age):
 8         if new_age > 0 and new_age <= 120:
 9             self.__age = new_age
10 
11     # 返回私有属性的方法
12     def get_age(self):
13         return self.__age
14 
15 
16 laowang = Person("老王", 30)
17 laowang.set_new_age(32)
18 print(laowang.get_age())

运行结果

技术分享图片

2. 类的单继承(注:父类私有方法及属性不可被继承)

 1 class Cat:
 2     def __init__(self, color=白色):
 3         self.color = color
 4 
 5     def run(self):
 6         print(---跑---)
 7 
 8 
 9 class PersianCat(Cat):
10     pass
11 
12 
13 cat = PersianCat(黑色)
14 cat.run()
15 print(cat.color)

运行结果

技术分享图片

3. 类的多继承

class Bird:
    def fly(self):
        print("--天上飞的方法--")

    def breathe(self):
        print("--鸟类的呼吸--")


class Fish:
    def swin(self):
        print("--水里游的方法--")

    def breathe(self):
        print("--鱼类的呼吸--")


class Volador(Bird, Fish): # 定义水鸟类(breathe为同名方法,先继承那个类就调哪个方法)
    pass


vola = Volador()
vola.fly()
vola.swin()
vola.breathe()

运行结果

技术分享图片

4. 父类的操作————重写

 1 class Hello:
 2     def say_hello(self):
 3         print("--Hello--")
 4 
 5 
 6 class Chinese(Hello):
 7     def say_hello(self):        # 继承父类后的方法重写
 8         print("--吃了木有?--")
 9 
10 
11 chinses = Chinese()
12 chinses.say_hello()

运行结果

 技术分享图片

5. 父类的操作————调用

class Animal:                           # 动物:父类
    def __init__(self, leg_num):
        self.leg_num = leg_num


class Birdman(Animal):
    def __init__(self, leg_num):
        self.plume = "白色"
        super().__init__(leg_num)       # 调用父类方法


bird = Birdman(2)
print("有一只%s条腿%s羽毛的鸟人在树上装逼..." % (bird.leg_num, bird.plume))

运行结果

技术分享图片

 6. 初识多态(调用同一种方法而出现的两种形式)

class A:
    def test(self):
        print(--A--Test.)


class B(A):
    def test(self):
        print(--B--Test.)


def func(tmp):
    tmp.test()  # 根据这里可知,传入的实参为对象


a = A()
b = B()

func(a)  # 传入对象a,调用a中的test()方法
func(b)  # 传入对象b,调用b中的test()方法

运行结果

技术分享图片

7. 进一步认识“多态”(传入不同的对象,调用不同的方法,跟上面一样)

class Animal():
    def shout(self):    # 叫的方法
        print("--Animal--shout--")


class Dog(Animal):
    def shout(self):
        print("--汪,汪汪,汪--")


class Cat(Animal):
    def shout(self):
        print("--喵--喵--")


def func(tmp):
    tmp.shout()


dog = Dog()
cat = Cat()

func(dog)
func(cat)

运行结果

技术分享图片

8. 类属性、实例属性

class Cat:
    num = 0                 # 类属性

    def __init__(self):     # 实例属性
        self.age = 1


print(Cat.num)              # 类属性
print(\\n)

cat = Cat()                 # 实例属性
print(cat.num)
print(cat.age)

运行结果

技术分享图片

9. 类的方法(不用实例化,拿来就用的赶脚)(注意,它不能访问实例属性,只可访问类属性)

class Test:
    # 类属性
    num = 0

    # 类方法
    @classmethod
    def set_num(cls, new_num):
        cls.num = new_num


Test.set_num(300)
print(Test.num)

运行结果

技术分享图片

10. 静态方法

 

class Test:
    @staticmethod
    def print_test():
        print("--哥是静态方法--")


Test.print_test()   # 类调用静态方法(不用实例化,即写即用)

test = Test()       # 对象调用静态方法
test.print_test()

运行结果

技术分享图片

果然,真尼玛琐碎。。。。。。

以上是关于面向对象的琐碎特性的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

面向对象的特性是啥?

面向对象三大特性

面向对象 三大特性 五大原则

面向对象三大基本特性,五大基本原则