继承和单例模式

# 父类车类(品牌,颜色,方法:启动),子类小汽车(座位数)
''' 知识点:1.== 在于测试两个被引用的对象是否有相同的值,is 在于测试两个变量是否引用了同一个对象
            2.__repr__()方法与__str__()方法的区别:repr不用遍历输出,它返回的是列表形式
            3.super().start()#调用父类方法:super().方法名(父类方法里的参数,不包括self)
            super(SmallCar,self).start()#调用父类方法:super(子类名,self).方法名(父类所调用的方法里的参数,不包括self)
             Car.start(self)#调用父类方法:父类名.方法名(self,参数)
           4.初始化父类__init__:
              # first:
              self.brand = brand
              self.color = color
              # second:
              super().__init__(brand,color)
              super(SmallCar,self).__init__(brand,color)
              # third:
              Car.__init__(self,brand,color)
           5.less than -- lt小于 , great than -- gt大于 , isinstance(agre1,agre2)判断两个参数是不是一个类型
           以下:如果名字一样就按age排序,否则按中文名字排序encode('gbk')
            if self.name == other.name:
                return self.age > other.age
            else:
                return self.name.encode("gbk") > other.name.encode("gbk")

            '''


# 父类
class Car:
    def __init__(self,brand=None,color=None):
        self.brand = brand
        self.color = color
    def start(self):
        print('汽车可以启动!')

#子类
class SmallCar(Car):
    def __init__(self,brand=None,color=None,seating=None):
        # first:
        # self.brand = brand
        # self.color = color

        # second:
        # super().__init__(brand,color)
        #super(SmallCar,self).__init__(brand,color)

        # third:
        Car.__init__(self,brand,color)
        self.seating = seating
    def start(self):
        print('小汽车也可以启动!')
    def seat(self):
        #super().start()#调用父类方法
        super(SmallCar,self).start()#调用父类方法
        #Car.start(self)#调用父类方法
        print('{0}牌的{1}小汽车有{2}个座位'.format(self.brand,self.color,self.seating))
    def __str__(self):
        return '{0}牌的{1}小汽车有{2}个座位'.format(self.brand,self.color,self.seating)
    def __repr__(self):
        return '{0}牌的{1}小汽车有{2}个座位'.format(self.brand, self.color, self.seating)
    def __lt__(self,other):
        if isinstance(other,SmallCar):
            return self.seating < other.seating
        else:
            return None
        # if self.brand == other.brand:
        #     return self.seating < other.seating
        # else:
        #     return self.brand.encode('gpk')

# 实例化
smallCar = SmallCar('可爱','red',6)
smallCar.seat()
smallCar.start()
list1 = []
list1.append(SmallCar('happy','orangered',4))
list1.append(SmallCar('smart','green',8))
list1.append(SmallCar('little','yellow',2))
for car in list1:
    print(car)

print('-'*40)
list1.sort()
print(list1)



#构造方法和初始化方法:先执行构造方法__new__(cls,)后执行初始化方法__init__(self,)
class Person():
    def __new__(cls,*args,**keywords):#参数写成(cls,name,age)也可以,只要与__init__(self,)里保持一致就可以
        print('---new---')
        return object.__new__(cls)
    def __init__(self,name,age):
        self.name = name
        self.age = age
        print('---init---')
p = Person('lucy',18)




#单例模式
class SingleDemo:
    __sd = None
    def __new__(cls):
        if cls.__sd == None:
           cls.__sd = object.__new__(cls)
        return cls.__sd
s = SingleDemo()
d = SingleDemo()
print(s,d)


#课外例子
class Parent(object):
    def __init__(self):
        self.parent = 'I\'m the parent.'
        print('Parent')#1
    def bar(self,message):
        print('{0} from Parent'.format(message))#3
class Child(Parent):
    def __init__(self):
        super().__init__()
        print('Child')#2
    def bar(self,message):
        super().bar(message)#3
        print('Child bar fuction')#4
        print(self.parent)#5
child = Child()
child.bar('HelloWorld')

#此例中初始化父类
'''
父类初始化时没有参数,就不需要加参数
super().__init__()            #super().__init__(父类初始化时的参数)
super(Child,self).__init__()  #super(子类名,self).__init__(父类初始化时的参数)
Parent.__init__(self)       #父类.__init__(self,父类初始化时的参数)
'''
#此例中调用父类方法
'''
super().bar(message)
super(Child,self).bar(message)
Parent.bar(self,message)
'''

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值