python_Day08||类与对象下

本文介绍了Python面向对象编程中的关键概念:继承、组合和类属性。通过示例展示了如何使用super()函数进行方法调用,如何通过组合创建复合对象,以及类属性和实例属性的区别和交互。同时,解释了对象的数据属性存储在__dict__中,并探讨了内置函数如issubclass(), isinstance(), type()等在类和对象检查中的应用。
摘要由CSDN通过智能技术生成

类与对象

1.继承

  • 调用未绑定的父类方法 Fish.init(self)
  • 使用super函数 super().init()

2.组合

class Turtle:
    def __init__(self,x):
        self.num=x

class Fish:
    def __init__(self,x):
        self.num=x

class Pool:
    def __init__(self,x,y):
        self.turtle=Turtle(x)
        self.fish=Fish(y)
    def Print_num(self):
        print("水池里乌龟有%s只,鱼有%s只"%(self.turtle.num,self.fish.num))

p =Pool(2,3)
p.Print_num()


3.类,类对象,实例对象

#类对象
class A(object):
    pass
#实例对象
# 实例化对象 a、b、c都属于实例对象。
a = A()
b = A()
c = A()

#类属性
class A():
    a = 1 #类属性
    def __init__(self):
        A.a = 1 # #使用类属性可以通过 (类名.类属性)调用

#实例对象
#属性只能在自己的对象里面使用,其他的对象不能直接使用,因为 self 是谁调用,它的值就属于该对象
# class fun():#fun表示类名
#     __init__(self):
#     self.name=xx #实例属性
#创建类对象
class Text(object):
    class_attr = 100    #类属性

    def __init__(self):
        self.sl_attr=100  #实例属性

    def func(self):
        print('类对象.类属性的值:',Text.class_attr)#调用类属性
        print('self.类属性的值:',self.class_attr)#相当于把类属性变成了实例属性
        print('self.实例属性的值:',self.sl_attr)#调用实例属性

a = Text()
a.func()
# 类对象.类属性的值:100
# self.类属性的值:100
# self.实例属性的值:100
print("================")
b = Text()
b.func()
# 类对象.类属性的值: 100
# self.类属性的值: 100
# self.实例属性的值: 100
print('===============')
a.class_attr = 200
a.sl_attr = 200
a.func()
# 类对象.类属性的值: 100
# self.类属性的值: 200
# self.实例属性的值: 200
print('===============')
b.func()
# 类对象.类属性的值: 100
# self.类属性的值: 100
# self.实例属性的值: 100
print('================')
Text.class_attr=300
a.func()
# 类对象.类属性的值: 300
# self.类属性的值: 200
# self.实例属性的值: 200
print('==============')
b.func()
# 类对象.类属性的值: 300
# self.类属性的值: 300
# self.实例属性的值: 100

4.绑定

# Python 对象的数据属性通常存储在名为 .__ dict__ 的字典中,我们可以直接访问 __dict__
# 或利用 Python 的内置函数 vars() 获取 .__ dict__

class cc:
    def setxy(self,x,y):
        self.x=x
        self.y=y

    def printxy(self):
        print(self.x,self.y)

dd=cc()
print(dd.__dict__)
#{}
print(vars(dd))
#{}

dd.setxy(5,6)
print(dd.__dict__)
#{'x': 5, 'y': 6}
print(vars(dd))
#{'x': 5, 'y': 6}

5.一些相关的内置函数BIF

  • issubclass(class, classinfo) 方法用于判断参数 class 是否是类型参数 classinfo 的子类
  • isinstance(object, classinfo) 方法用于判断一个对象是否是一个已知的类型,类似 type()
  • type() 不会认为子类是一种父类类型,不考虑继承关系。
  • hasattr(object, name) 用于判断对象是否包含对应的属性
  • getattr(object, name[, default]) 用于返回一个对象属性值
  • setattr(object, name, value) 对应函数 getattr() ,用于设置属性值,该属性不一定是存在的
  • delattr(object, name) 用于删除属性
  • class property([fget[, fset[, fdel[, doc]]]]) 用于在新式类中返回属性值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值