美文网首页
python里的面向对象

python里的面向对象

作者: 可乐_d001 | 来源:发表于2017-10-27 21:44 被阅读0次

    class Student:
    //count = 0 // count变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用Student.count访问。

    //init()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
    def __init __(self,name,age):
    self.name = name
    self.age = age
    Student.count =Student.count + 1
    //在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数,叫做实例方法:
    def one(self):
    print('name:',self.name,'age:',self.age)
    print('Zount:',Student.count) //如果在这打印的话,得到的就是0,因为还没有给传参
    //下边俩是创建实例对象
    st1 = Student('大傻',12)
    st2 = Student('二傻',23)
    //使用点(.)来访问对象的属性。
    st1.one() //name ;大傻,age:12
    st2.one() //name ;大傻,age:12
    //使用类的名称访问类变量:
    print('Zount:',Student.count) //这个打印出来就是2 ,这个Student.count是在st1,st2,传了参数以后就会触发的,

    //可以添加,删除,修改类的属性:
    st1.name = ‘是是是’ //修改
    st1.grade = 343 // 增加
    del st1.age //删除age属性
    //判断st1中有没有age,有就返回true
    bol = hasattr(st1, 'age')
    print(bol)

    //我们来解释一下实例变量
    实例变量(实例属性,对象属性,属性)
    def init(self,name,age): # 实例变量要定义在这个函数里,该函数接收的第一个参数是

    指针类型

    self指针永远指向该类创建出的某个对象 不会随着对象的变化而更改

    init函数在调用类创建对象过程中会自行调用执行,不需要手动调用此函数

    //我们来说一下定义类方法@classmethod
    class Student:
    country = 'china'
    def init(self):
    self.country = 'Ameian'
    @classmethod (#装饰器 待我确定到底有啥用)
    //通过系统装饰器classmothod声明函数为类方法,类方法中的self指针指向的是类本身
    也就意味着类方法只能访问类变量,或类属性,不能访问实例变量,就是不走那个init方法
    def say(self):
    print('我的国家是:'+self.country)
    stu = Student()
    stu.say() //我的国家是:china
    Student.say() //我的国家是:china

    特性:property 属性中的一种

    class Student:
    def init(self,name):
    self._name = name
    def hello(self):
    return self._name+'hrllp'
    st = Student('zhangsan')
    print(st._name) san1//zhang
    st.hello = 'coiad'
    print(st.hello) //coiad
    //如果这个时候
    class Student:
    def init(self,name):
    self._name = name
    @property
    def hello(self):
    return self._name+'hrllp'
    st = Student('zhangsan')
    print(st._name) //zhang
    st.hello = 'coiad'
    print(st.hello) //就会报错,因为不让修改
    //也就是,如果调用特性,则用户只能访问不能设置

      //接下来就解释一下,怎么修改
      //设置器:专门给特性使用,用来修改特性的值
        @姓名.setter
    

    class Student:
    def init(self,name):
    self._name = name
    @property
    def hello(self):
    return self._name
    @hello.setter
    def hello(self,num): //这里的num是要改成什么值
    if type(num) is int:
    self._num = num;
    else:
    print(‘请输入正值’)
    删除器:通过del删除某个特性时,如果定义了删除器,则该操作会执行删除中的代码
    @name.deleter
    def name(self):
    print('不能删')
    st = Student('zhangsan')
    print(st._name)
    stu.name = 122
    print(stu.name) //就把特性的值给改了
    del stu.name //打印出来不能删

    py中的私有化机制:属性名改写,在所有需要私有化的属性前添加俩下划线,则该属性名会变成:类名_属性名
    class Student:
    def init(self):
    self.name = 'sdsdd'
    def __say(self):
    print(''hello,'+self.name')
    stu = Student()
    stu._Student__say()

    //继承
    class A:
    def init(self):
    self.name = 'zhang'
    def say(self):
    print('我是父类')
    class B(A): # 声明继承关系,在子类名后跟小括号,小括号里是要继承的父类名
    # 继承的语法
    # 继承关系中init方发的执行逻辑:
    # 在子类没有实现inIT方法时,会触发父类中的init执行
    # 如果子类实现了init,则只触发子类的init,不会触发父类的
    def init(self):
    # 手动调用父类的init函数
    A.init(self)
    print('我是子类的')

    def Bsay(self):
        print('我是子类')
    # 在子类中腹泻父类中的方法
    def say(self):
        A.say(self)
        print('我是腹泻的子女数据')
    

    a = A()

    b = B()
    b.say()
    print(b.name)
    //我是子类的
    //我是父类
    //我是腹泻的子女数据
    //zhang

    # type() 获取到对象的数据类型(内置数据类型)
    

    print(type(12.34) is int)
    class A:
    pass
    class B(A):
    pass
    a = A()
    print(type(a) is A)

    isinstance 用来判断对象和类之间的关系,一般是自定义对象

    bol = isinstance(a,A)
    print(bol)

    issubclass 判断B是否继承自A

    bol = issubclass(B,A)
    print(bol)

    相关文章

      网友评论

          本文标题:python里的面向对象

          本文链接:https://www.haomeiwen.com/subject/xrydpxtx.html