python--类、继承

类的定义:

class Stu():
    name="swallow"
    age=18
    add="shantou"
    send=None
    def doHome(self):
        print("lalal")
        return None

查看定义的类有什么东西

Stu._dict_

对象定义与操作:

lili=Stu()
lili.name="lili"
lili.doHome()

类、对象访问

class Stu():
    name="swallow"
    age=19
    def say(s):
        name="lili"
        age=11
        print(s.name)#lili
        print(_class_.age) #19
    def say():
        print("lalal")

a=Stu()
A.say() #访问say()只能有类名访问除非有传值

定义私有成员前面加__下划线以及访问,构造函数

class Stu():
    __age=18
    def __init__(self):
        print("gouzao")

a=Stu()
print(a._Stu__age)

构造函数

  1. 是一类特殊的函数,在类进行实例化之前进行调用
  2. 如果定义了构造函数,则实例化时使用构造函数,不查找父类构造函数
  3. 如果没定义,则自动查找父类构造函数
  4. 如果子类没定义,父类的构造函数带参数,则构造对象时的参数应该按父类参数构造

类的继承:

class Stu():
    name="swallwo"

class Teacher(Stu):

class Header(Stu,Teach):

print(Header.__mro__) #显示出继承的所有父类和本身

继承的特征:

  1. 所有的类都继承自 object类,即所有的类都是 object类的子类
  2. 子类一旦继承父类,则可以使用父类中除私有成员外的所有内容
  3. 子类继承父类后并没有将父类成员完全赋值到子类中,而是通过引用关系访问调用
  4. 子类中可以定义独有的成员属性和方法
  5. 子类中定义的成员和父类成员如果相同,则优先使用子类成员
  6. 子类如果想扩充父类的方法,可以在定义新方法的同事访问父类成员来进行代码重用
  7. 可以使用父类名.父类成员的格式来调用父类成员,也可以使用 super().父类成员的格式来调用
  8. super不是关键字,而是一个类
  9. super的作用是获取MR0( MethodResolustion0rder)列表中的第一个类
  10. super于父类直接没任何实质性关系,但通过 super可以调用到父类
  11. super使用两个方,参见在构造函数中调用父类的构造函数 

类的常用函数:

  1. subclass:检测一个类是否是另一个类的子类
  2. instance:检测一个对象是否是一个类的实例
  3. hasattr:检测一个对象是否由成员xXx
  4. etattr: get attribute
  5. setattr: set attribute
  6. delattr: delete attribute
  7. dir:获取对象的成员列表 
class A():
    name="swallow"
class B(A):
    pass
class C():
    pass
a=A()
print(issubclass(A,B))

print(isinstance(A,A))

print(hasattr(a,"name"))

setattr(a,"name",lili)

dir(A)

property方法:

class Person():
    def fget(self):
        return self._name*2
    def fset(self,name):
        self._name=name.upper()
    def fdel(self):
        self._name="None"
    name.property(fget,fset,fdel,"对name进行操作") 
p1=Person()
p1.name="swallow"
print(p1.name)
        

类的内置属性:

  1. __dict__:以字典的方式显示类的成员组成
  2. __doc__:获取类的文档信息
  3. __name__:获取类的名称,如果在模块中使用,则获取的是模块的名称
  4. __bases__:获取某个类的所有父类,以元组的方式显示

类的魔术方法:

__call__:对象当函数调用时触发

class A():
    def __init__(self):
        print("fist")
    def __call__(self):
        print("second")
a=A()
a()

__str__:对象当字符串使用时触发

class A():
    def __init__(self):
        print("fist")
    def __str__(self):
        return "fan hui de zifuchuan"
a=A()
print(a)

__getattr__:访问没有的属性时触发

class A():
    def __init__(self):
        print("fist")
    def __getattr__(self,name):
        print("name is not be found")
a=A()
print(a.name)

__setattr__:对成员属性进行设置时触发

class A():
    def __init__(self):
        print("fist")
    def __setattr__(self,name,value):
        print("name ={0}".format(name))
        supper().__setattr__(name,value):

a=A()
a.age=1

__gt__:进行大于判断时触发,__gt__(self,obj)

类的三种方法

cLass person:
    #实例方法
    def eat(self):
        print(self)
        print("Eating..")
    #类方法
    #类方法的第一个参数,一般命名为Cl5,区别于self
    @classmethod
    def play (cls):
        print (cls)
        print("Playing.. ")
    #静态方法
    #不需要用第一个参数表示自身或者类
    @staticmethod
    def say ():
        print("Saying..")
        yueyue Person()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值