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
python杂记(5):类与对象
最新推荐文章于 2021-08-09 21:57:37 发布