python杂记(5):类与对象

class Human: #类的名字最好大写
    #属性
    arms=2
    eyes=2
    mouth=1

    #方法
    def leg(self,n):
        self.legs=n #在方法中定义了一个属性legs。在类的方法内使用类的属性变量,需要:self.变量名。如果
        #不加self.,则会被当成普通的变量,且这种变量不能在类中共享,只能在方
        #法内使用
        
    def walk(self): #类相当于房子图纸,对象相当于房子,self相当于门牌号
        print('我用%d条腿走路'%self.legs)
        
stud1=Human()#把类实例化,创建一个human类的对象
stud1.leg(2)
stud1.walk() #括号不要忘了

#-----------__init__(self)方法(是双下划线)(构造方法):其作用为在创建一个对象时,它可以在对象被创造时自动调用-------------#

class Dogs:
    def __init__(self,name):#可以有参数
        self.dogname=name
    def bark(self):
        print('%s:汪汪汪'%self.dogname)
        
dog1=Dogs('二哈')#在创建对象时,自动调用__init__
dog1.bark() #输出:  二哈:汪汪汪

#python中定义私有变量或者函数,要在其前面加上双下划线 __ ,相当于c++中的private
class Whut:
    __name='hahahaha'#加了双下划线,则外部无法访问

    def getname(self):
        print(self.__name) #不要忘记加self.

whuter=Whut() 
# print(whuter.__name)#报错AttributeError: 'whut' object has no attribute '__name'
whuter.getname() #可以这样调用

#----------------------继承----------------------------#
#先定义一个父类
class Parent:
    def __init__(self):
        self.x=1
        print('6666')
    def hello(self):
        self.x-=1
        print('父类,%d'%self.x)
        
class Child(Parent):#子类通过括号继承父类,这里继承了父类的hello函数
    pass #占位符

child1=Child()
child1.hello()

class Child1(Parent):
    def hello(self): #如果子类的方法与父类同名,则会覆盖父类的方法
        print('子类')
    
child2=Child1()
child2.hello()

class Son(Parent):#当然,子类中还可以有其特有的属性、方法等
    def __init__(self):#
        super().__init__() #因为hello方法要使用__init__,而子类Son中与父类同名,覆盖了,
                           #这里可以使用super()函数,它可以自动找到父类的方法,并传递参数,连self参数都不用写
        self.h=True
    def eat(self):
        if self.h:
            print('23333')
son=Son() #此时已经调用了__init__(self),self.h=True
son.eat() #输出:23333
son.hello()

#--------------------------多重继承-----------------------------#
class Dio(Parent,Human):
    pass
#可以继承多个类
dio=Dio()
dio.leg(2)
dio.walk()
dio.hello()

#------------------------组合-----------------------------#
#组合即将类的实例化放到一个新类里面,实现组合。旧类之间是横向关系。继承是纵向关系
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) #可以直接把Turtle类实例化,self.turtle是一个对象名,不加self则只能在该方法中使用,不能在类中共享
        self.fish=Fish(y)
    def number(self):
        print('有%d只乌龟,有%d条鱼'%(self.turtle.num,self.fish.num))

pool=Pool(4,5)
pool.number() #有4只乌龟,有5条鱼

#------------------绑定-----------------------------------#
class Abcd:
    def printhah(self):
        print('hahha')
abcd=Abcd()
# 实例对象:abcd.printhah()   类对象:Abcd.printhah()
#绑定:python严格要求方法需要在有实例时才能被调用

#---------与类相关的一些BIF(内置函数)--------------#
#issubclass(a,b),判断a是否为b的子类。isinstance(b,B)检测实例对象b,是否属于类B
#还有很多,略
class A:
    pass
class B(A):
    pass
b=B()
print(issubclass(B,A)) #True
print(isinstance(b,B)) #True
print(isinstance(b,A)) #True
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值