python-类的基本知识

#类的基本知识
#类对象的优点:多态,封装,继承

#多态
from random import choice
s=['A',"B","C","D"]
ch=choice(s)#从列表中随机选择元素,并返回
print(ch)

#例:序列中的count函数为多态函数,不管时字符串类型还是列表类型,都可以使用该函数
#很多函数和运算符都是多态的,不需要确定对象的具体类型

#封装:是指向程序中的其他部分隐藏对象的具体实现细节的原则

#继承:子类,超类(基类)
#class语句会在函数定义的地方创建自己的命名空间
_metaclass_=type#确定使用新式类,可以通过type(对象)来查看实例对象所属的类

class People:
    def getName(self):#self参数为对象自身的引用
        return self.name
    def setName(self,name):
        self.name=name
    def Print(self):
        print("Hello world! I'm %s."%self.name)
person=People()
person.setName("Li")
print(person.getName())
person.Print()

person.name='Wang'
print(person.getName())
person.Print()

#上述self参数:方法将它们的参数判定到所属的实例上,因此无需显示提供,方法和普通函数可以互相绑定,如下;
def Prints():
    print("function Prins")
person.Print=Prints#函数绑定不能加括号
person.Print()

func=person.Print#通过变量引用类方法,实际上func还是绑定到了对象上,因为该方法访问了自身

#默认情况下,可以在外部访问对象的特性,可以通过在方法或特性的名字前面加双下划线可以变为私有的
class stu:
    def __getId(self):
        print("you can't see id!")
    def Myget(self):
        self.__getId(self)
st=stu()
st._stu__getId()#实际上双下划线被解释为单下划线加加类名加私有方法,即这样可以访问

#from module import *:不会导入前面有下划线的名字

class stuff:
    num=0#在类的作用域定义了一个可供所用实例访问的变量
    def init(self):
        stuff.num+=1
x=stuff()
x.init()
print(x.num)
y=stuff()
y.init()
print(y.num)
#上述x,y操作了同一个变量,但可以将某个实例的该变量重新绑定到其他值上,而屏蔽类范围内的变量


#超类:在类定义的类名后的圆括号里指定多个该类的超类,子类可以扩展超类的定义
class Others:
    def Output(x=None):
        print("others data!")
class shape:
    def init(self):
        self.block=[]
    def getdata(self,data):
        return [x for x in data if x not in self.block]
class rect(shape,Others):#多重继承,若shape,Others有同名方法,则shape的方法可用,而Others的该方法被重写(使其不可访问)
    def init(self):
        self.block=['A']

sh=shape()
sh.init()
print(sh.getdata([1,2,3]))

r=rect()
r.init()
r.Output()
print(r.getdata(['A','b','c']))

#使用内建函数issubclass(x,y)函数可以查看一个类x是不是另一个类y的子类,返回布尔值
print(issubclass(rect,shape))

print(rect.__bases__)#使用__base__或__bases__特性可以查看类的基类

print(isinstance(r,rect))#使用函数isinstance(x,y)检查x是否为类y的(间接)实例,返回布尔值

print(r.__class__)#使用__class__特性检查一个对象属于哪个类

    
 

运行结果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秘境之眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值