python入门(9)

python入门(9)

类的案例

class DogInfo(object):
    def __init__(self):
        # 初始化操作,定义的是属性,实例属性
        self.leg=leg
    def bark(self):
        print("狗会叫")

注意:

  1. self这个形参,代表的就是实例对象,在使用过程中自动调用
  2. 在init这个魔法方法里,定义的都是实例的属性
  3. DogInfo()创建的是实例化对象,注意,init方法会自动调用
  4. 先调用__new__()方法,后调用__init__()方法

###通过类创建实例

实例 = 类名()
注意点:
如果有init需要传参,那么()中需要填写,init的参数

调用实例的属性

在类的内部调用
class DogInfo(object):
    def __init__(self,leg):
        # 初始化操作,定义的是属性,实例属性
        self.leg=leg
    def bark(self):
        # 在方法中调用实例属性
        print(self.leg)
        print("狗会叫")

注意点:

在方法中调用的实例属性,通过self.属性名,调用。因为self指向的就是实例

在类的外部调用
  1. 创建实例DogInfo(4)
  2. 调用实例
class DogInfo(object):
    def __init__(self):
        # 初始化操作,定义的是属性,实例属性
        self.leg=leg
    def bark(self):
        # 在方法中调用实例属性
        print(self.leg)
        print("狗会叫")
dog = DogInfo(4)
dog.name

注意点:

在类的外部,通过创建对象来调用我们的实例属性

通过实例调用方法

在类的外面调用方法
class DogInfo(object):
    def __init__(self,leg):
        # 初始化操作,定义的是属性,实例属性
        self.leg=leg
    def bark(self):
        # 在方法中调用实例属性
        print(self.leg)
        print("狗会叫")

dog=DogInfo(4)
dog.bark()

注意点:

通过实例调用

如果方法需要传参,在方法的()传入

在类的内部调用方法
class DogInfo(object):
    def __init__(self,leg):
        # 初始化操作,定义的是属性,实例属性
        self.leg=leg
    def bark(self):
        # 在方法中调用实例属性
        print(self.leg)
        print("狗会叫")
    def use_bark(self):
        self.bark()

dog=DogInfo(4)
dog.use_bark()

在类的内部调用,self.方法名

动态添加临时属性并获取

class DogInfo(object):
    def __init__(self,leg):
        # 初始化操作,定义的是属性,实例属性
        self.leg=leg
    def bark(self):
        # 在方法中调用实例属性
        print(self.leg)
        print("狗会叫")
    def use_bark(self):
        self.bark()

dog=DogInfo(4)

dog.use_bark()
dog.name="小白"
print("临时属性的访问",dog.name)

注意点:

  1. 关于实例属性与临时属性区别

    实例属性,是只要通过当前类创建,都有的

    临时属性,是一个实例具有的,其他的对象可有可无

  2. 在写web的时候,可能会为了方便起见

init new 方法

    def __init__(self): # known special case of object.__init__
        """ Initialize self.  See help(type(self)) for accurate signature. """
        pass
    def __new__(cls, *more): # known special case of object.__new__
        """ Create and return a new object.  See help(type) for accurate signature. """
        pass

注意点:

  1. new方法创建并且返回新实例对象
  2. init方法完成实例的初始化
  3. new先用

str方法

class DogInfo(object):
    def __init__(self,leg):
        # 初始化操作,定义的是属性,实例属性
        self.leg=leg
    def bark(self):
        # 在方法中调用实例属性
        print(self.leg)
        print("狗会叫")
    def use_bark(self):
        self.bark()

dog=DogInfo(4)
print(dog)
# <__main__.DogInfo object at 0x0000020CAFAA7A90>
class DogInfo(object):
    def __init__(self,leg):
        # 初始化操作,定义的是属性,实例属性
        self.leg=leg
    def bark(self):
        # 在方法中调用实例属性
        print(self.leg)
        print("狗会叫")
    def use_bark(self):
        self.bark()
    def __str__(self):
        return "狗类"

dog=DogInfo(4)
print(dog)
# 狗类

注意点:

  1. 返回string类型

实例属性的更改

实例外部的更改
class DogInfo(object):
    def __init__(self,leg):
        # 初始化操作,定义的是属性,实例属性
        self.leg=leg
    def bark(self):
        # 在方法中调用实例属性
        print(self.leg)
        print("狗会叫")
    def use_bark(self):
        self.bark()
    def __str__(self):
        return "狗类"
    def showleg(self):
        print("狗腿为:",self.leg)

dog=DogInfo(4)
dog.showleg()
dog.leg=5
dog.showleg()
实例内部修改
class DogInfo(object):
    def __init__(self,leg):
        # 初始化操作,定义的是属性,实例属性
        self.leg=leg
    def bark(self):
        # 在方法中调用实例属性
        print(self.leg)
        print("狗会叫")
    def use_bark(self):
        self.bark()
    def __str__(self):
        return "狗类"
    def showleg(self):
        print("狗腿为:",self.leg)

    def new_leg(self,leg):
        self.leg=leg

dog=DogInfo(4)
dog.showleg()
dog.new_leg(5)
dog.showleg()

继承

####继承

class ChickenSoup(object):
    def __init__(self):
        self.name="祖传鸡汤"

    def cook(self):
        print("做法:***********")

class NewChickenSoup(ChickenSoup):
    def __init__(self):
        self.name="鸡汤2.0"

new=NewChickenSoup()
new.cook()
print("鸡汤的名字:",new.name)

注意点:

  1. 子类可以使用父类的属性和方法
  2. 如果子类方法与父类同名,使用子类自己的属性
  3. 如果子类有__init__方法,没有特殊操作,不能直接调用父类的属性
多继承
class ChickenSoup(object):
    def __init__(self):
        self.name="祖传鸡汤"

    def cook(self):
        print("做法:***********")

class NewEast(object):
    def bbq(self):
        print("烧烤秘方")

    def birdsoup(self):
        print("鸽子汤")

class NewChickenSoup(ChickenSoup,NewEast):
    def __init__(self):
        self.name="鸡汤2.0"

new=NewChickenSoup()
new.cook()
print("鸡汤的名字:",new.name)

注意点:

当前类继承于多个类,多个类写在括号中

多层继承
class ChickenSoup(object):
    def __init__(self):
        self.name="祖传鸡汤"

    def cook(self):
        print("做法:***********")

class NewEast(object):
    def bbq(self):
        print("烧烤秘方")

    def birdsoup(self):
        print("鸽子汤")



class NewChickenSoup(ChickenSoup,NewEast):
    def __init__(self):
        self.name="鸡汤2.0"

new=NewChickenSoup()
new.cook()
print("鸡汤的名字:",new.name)

NewChickenSoup----------->NewEast---------------->object

查找顺序
print(NewChickenSoup.__mro__)
(<class '__main__.NewChickenSoup'>, <class '__main__.ChickenSoup'>, <class '__main__.NewEast'>, <class 'object'>)

注意点:

多继承的查找顺序与继承的类的位置有关系

父类–子类 基类—派生类

私有属性和私有方法
class NewEast(object):
    def __init__(self):
        self.__money="2亿"

    def bbq(self):
        print("烧烤秘方")

    def birdsoup(self):
        print("鸽子汤")


class NewChickenSoup(NewEast):

    def cook(self):
        print("!!!!!!!!!!!!!!!!!!!!!")

new=NewChickenSoup()
# print(new.money)
xx=NewEast()
print(xx.__money)

注意点:

  1. 私有属性:__属性名,不能被子类调用,也不能被自己的实例调用
  2. 但是私有属性,可以在类的内部进行调用
保护属性和保护方法
def __init__(self):    
	self._money="2亿"

一个下划线

重写与调用父类的方法
class NewEast(object):
    def cook(self):
        print("鸽子汤")

class NewChickenSoup(NewEast):
    def cook(self):
        print("!!!!!!!!!!!!!!!!!!!!!")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值