class car(object):
def __init__(self,b_or_s,weight):
self.type=b_or_s
self.weight=weight
def get_weight(self):
print(self.weight)
def drive(self):
if self.type=="big":
print("Drive the cart carefully")
elif self.type=="small":
print("just small car")
else:
pass
class bus(car):
def __init__(self,b_or_s,weight):
self.type=b_or_s
self.weight=weight
self.get_weight()
self.drive()
car1=car("big",10000)
car1.get_weight()
car1.drive()
car2=bus("small",5000)
print("_________________")
def get_drive(obj):
obj.drive()
bus_28=bus("small",6000)
bus_906=bus("small",10000)
bus_B32=bus("big",9999999)
print("--------------------------------------")
get_drive(bus_28)
get_drive(bus_906)
get_drive(bus_B32)
作业:

类(class)属性 方法
14.1创建类对象:
class 类名称():
<statement-1>
...
<statement-n>
属性与方法的分离
这里我创建一个简单的类:
class fun:
i=123456789 <-----属性
def fun233(): <-----方法
return 'wuhu'
下面调用i和fun233()的方法也很简单:
j=class()
print(j.i)==123456789
print(j.fun233())=='wuhu'
14.2 self
self指自己
class Myclass():
def fun1(self,bianliang1):
self.wuhu = bianliang1
这个地方就用到了self
self.wuhu其实就是一个变量 在Myclass里可以用self.wuhu再次调用它
在main中可以用Myclass.fun1(number)后用Myclass.wuhu来调用
例:
class Myclass():
def myfun(self,number):
self.wuhu=number
def mysecondfun(self):
print(self.wuhu)
c=Myclass()
c.myfun('ly')#-------------------------------------------------------------------------ly
print(c.wuhu)
c.mysecondfun()#---------------------------------------------------------------------------y
14.3 __init__
__init__魔法函数就是指他给定的class他本身
class Myclass():
def __init__(self,number):
self.wuhu=number
print(self.wuhu)
c=Myclass('ly')#这里不加字符串或字符会报错
结果为输出ly
class里可以将一个class里面的内容继承到另一个class里
class DerivedClassName(BaseClassName):
……
可以记为:class Now(Last):
class Myclass():
__ll='i'
def show_out(self):
print(self.__name)
class MySecondClass(Myclass):
pass
c=MySecondClass()
c.i_show_myself()#------------------------------------------------------ismine
这样MySecondClass()里面将有Myclass里面的属性和方法
可以用class New(Last1,Last2)实现多重继承
14.5.1 init与继承
当子类又用上了__init__时
可以用BaseClassName.__init__(self)重新调用
class Father():
def __init__(self):
self.x=1
class Son(Father)
def __init__(self):
self.y=1
c = Son()
print(c.x)#-----------------------报错
解决方法:
class Father():
def __init__(self):
self.x=1
class Son(Father):
def __init__(self):
Father.__init__(self)
self.y=1
c = Son()
print(c.x)#-----------------------------1
super([子class],self).方法([,attr])#不能加self
Python中子类可以覆盖父类的方法
要想重新调用被覆盖的父类的方法可以用super()调用父类的方法
super()在改变子类的魔法函数时显得尤其的重要
后加:
def __init__(self):
super(base_class_name,self).__init__()
self.wuhu=1
可以既继承父类 又可以设计子类的__init__ 这里子类的self.wuhu被创建了
当然不用非要用__init__
例如
class Father():
def __init__(self):
print('父类')
self.wuhu1=1
def fun1(self,x=1):
self.wuhu2=self.wuhu1+x
print('wuhu2=',self.wuhu2)
class Child(Father):
def __init__(self):
print('子类')
super(Child,self).__init__()
def fun1(self):
super(Child,self).fun1()
self.wuhu3=self.wuhu2+self.wuhu1
c1=Child()
c1.fun1()
print(c1.wuhu3)
结果为:
子类
父类
wuhu2= 2
3
class Father():
def __init__(self):
print('父类被调用')
class Child(Father):
def __init__(self):
print('子类被调用')
super(Child,self).__init__()#------------------<=这里不能加self
c1 = Child()#----------------------------------------<=父类被调用
子类被调用
这篇博客介绍了Python的面向对象编程基础,包括类的创建、属性与方法的分离、self关键字的使用、__init__初始化方法以及类的继承。通过实例展示了如何定义和调用类的方法,如get_weight()和drive(),并演示了如何通过super()来调用父类的方法。此外,还讨论了多重继承和使用super()在子类中初始化父类属性的重要性。
1879

被折叠的 条评论
为什么被折叠?



