学习python第八天

今天学习了面向对象第二部分的内容,有get和set方法,私有属性和私有方法,__del__方法,提了一下引用计数器,继承,方法重写,多继承以及多态的相关内容,具体笔记如下

'''
文件说明:
'''
class Dog:
    '''
    定义狗类
    '''
    def set_age(self,new_age):
        '''
        方法用于设置年龄属性
        '''
        self.age=new_age

    def set_name(self,new_name):
        '''
        方法用于设置年龄属性
        '''
        self.name=new_name

    def get_age(self):
        '''
        用于获取年龄
        '''
        return self.age

    def get_name(self):
        '''用于获取名字'''
        return self.name

dog=Dog()
dog.set_age(18)
dog.set_name("小强")
#通过赋值方式修改属性从一定程度上将不是很安全
# dog.name="老王"
# dog.age=-18

name=dog.get_name()
age=dog.get_name()
print(name,age)
'''
文件说明

    私有属性,只能在类的內部使用,外部无法访问

        如何定义?
            在属性的变量名字前面加上__
'''
class Dog:
    '''
    定义狗类
    '''

    def __init__(self,new_name):
        self.name=new_name
        #定义了一个私有属性,属性名字是__age
        self.__age=9


    def set_age(self,new_age):
        '''
        方法用于设置年龄属性
        '''
        if new_age>0 and new_age<100:
            self.__age=new_age
        else:
            self.__age=0

    def set_name(self,new_name):
        '''
        方法用于设置年龄属性
        '''
        self.name=new_name

    def get_age(self):
        '''
        用于获取年龄
        '''
        return self.__age

    def get_name(self):
        '''用于获取名字'''
        return self.name

dog=Dog("旺财")
dog.set_age(-10)
print(dog.get_age())

dog=Dog("捡起")
dog.set_age(20)
print(dog.get_age())

#此处通过该方式设置的变量并非私有变量,对类中的定义的私有变量无任何影响
# dog.__age=-10
# print(dog.__age)
# print(dog.get_age())
'''
文件说明
'''
class SuperVIP:

    def __skin(self):
        '''
        定义私有方法
        '''
        print("开始装扮超级会员专属皮肤!")

    def verrify(self,is_vip):
        if is_vip=="vip":
            self.__skin()
        else:
            print("请开通会员")

vip=SuperVIP()
#私有方法只能在内部使用,外部无法调用
#vip.__skin()
vip.verrify("p")

'''
文件说明
'''

class Hero:

    def __del__(self):
        '''
        1.当程序结束时,将释放所有的对象,del自动调用,完成清理工作

        '''
        print("lalala")
    pass

h1 = Hero()
h2 = h1
del h1#删除了h1的引用,__del方法不会被执行,因为还有h2指向hero
del h2#删除了Hero对象所有的引用,此时会执行__del__方法
print("============")
'''
文件说明

    通过sys.getrefcount(t1)我们可以获取到引用指向的对象有几个引用指向这个对象(结果比实际值大1)
'''
import sys
class T:
    pass

t1 = T()
t2 = t1
t3 = t2

i=sys.getrefcount(t1)
print(i)
'''
文件说明:
    什么是继承?
        当一个类中需要大量使用另一个类中的内容的时候,我们可以使用继承的方法
            被继承的类称之位 父类 或者 基类
            继承的类称之为 子类 或者 派生类

        一个父类可以拥有多个子类,子类可以使用父类的方法,子类之间的方法不能相互使用

    继承的方式:

        class 子类名称(父类名称):
            子类属性
            子类方法
'''

class Animal:
    '''定义动物类'''
    def eat(self):
        print("吃")

    def drink(self):
        print("喝")

    def run(self):
        print("跑")

    def jump(self):
        print("跳")


class Dog(Animal):
    def bark(self):
        print("狂吠中!")

class Cat(Animal):
    def mouse(self):
        print("抓老鼠")

dog1=Dog()
dog1.jump()

cat1=Cat()
'''
文件说明:

'''
class Animal:
    '''定义动物类'''
    def eat(self):
        print("吃")

    def drink(self):
        print("喝")

    def run(self):
        print("跑")

    def jump(self):
        print("跳")


class Dog(Animal):
    def bark(self):
        print("狂吠中!")

class Xiaotg(Dog):
    def fly(self):
        print("正在飞")


#子类继承了父类以及父类的父类等等的所有的方法
jianqi=Xiaotg()
jianqi.jump()
jianqi.bark()
jianqi.fly()
'''
文件说明:
    方法重写:
        1.当父类的方法不满足当下的需求的时候,可以对该方法进行重写,(方法名和父类中的一致)
        2.重写的方法,如果想要调用被重写的方法可以使用两种方法
        类名.方法名
        super().方法名 就近原则

'''
class Animal:
    '''定义动物类'''
    def eat(self):
        print("吃")

    def drink(self):
        print("喝")

    def run(self):
        print("跑")

    def jump(self):
        print("跳")


class Dog(Animal):
    def bark(self):
        print("狂吠中!")

    def jump(self):
        print("跳")

class Xiaotg(Dog):
    def fly(self):
        print("正在飞")

    def jump(self):
        print("疯狂的跳")
        #Animal.jump(self)
        super().jump()#就近原则


#子类继承了父类以及父类的父类等等的所有的方法
jianqi=Xiaotg()
#当父类的方法不满足当下的需求的时候,可以对该方法进行重写,(方法名和父类中的一致)
jianqi.jump()
jianqi.bark()
jianqi.fly()
'''
文件说明:

    私有方法和属性不能被继承,如果私有的属性和方法想要被子类使用,在父类中提供一个公有的方法去操作私有的方法或属性

'''

class A:
    def __init__(self):
        self.num=10
        #定义私有属性
        self.__num1=100

    def test1(self):
        print("11111")

    def __test2(self):
        print("22222")

    def test3(self):
        print(self.__num1)

class B(A):
    pass

b1=B()
b1.test1()
print(b1.num)

b1.test2()
print(b1.__num1)
'''
文件说明:
    Python支持多继承
        一个类如果想要继承多个类,可以在类名后面的括号中,写上多个父类的名称,用逗号隔开

    print(D.__mro__)使用 类名.__mro__方法可以查看当前类的调用顺序
    底层:C3算法

'''

class A(object):
    def test(self):
        print("a")

class B(A):
    def test1(self):
        print("b")

class C(A):
    def test2(self):
        print("c")

class D(B,C):
    def test3(self):
        print("D")
        A.test(self)

d=D()
d.test()
d.test1()
d.test2()
d.test3()

print(D.__mro__)
'''
文件说明:

    让具有不同功能的函数可以使用相同的名字,这样就可以使用一个函数名称调用不同功能(函数)

    Pythond的多态
    1.只关心对下的实力方法名是否相同,不关心对象的类型
    2.不关心对象之间的继承关系
    3.好处是让代码的外部调用更灵活

'''

class Dog(object):
    def print_self(self):
        print("你好我是一只狗我的名字叫旺财")

class Cat(object):
    def print_self(self):
        print("你好我是一只猫我的名字叫小叮当")

def introduce(temp):
    temp.print_self()

dog=Dog()
cat=Cat()

introduce(dog)
introduce(cat)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值