Python 面向对象【初级篇】

文章参考:
Python 面向对象(初级篇)
python 面向对象(进阶篇)


Python 是一门面向对象的语言。本文是面向对象编程的初级篇,仅介绍封装,不涉及继承和多态。鉴于C++也是一门面向对象的语言,里面有很多相通之处。

类的成员

类的成员可以分为三大类:变量方法属性

Python 面向对象【初级篇】_第1张图片



变量

  • 普通变量属于对象
  • 静态变量属于,即不管实例化了多少个对象,静态变量只有一份
class student:

    # 静态变量
    type = "human"

    def __init__(self, id, name):
        # 普通变量
        self.id = id
        self.name = name

# 访问静态变量
print(student.type)

# 访问普通变量
s = student(3, "mick")
print(s.name)
print(s.type)       # 静态变量也可以由对象访问


方法

  • 普通方法:由对象调用,至少一个self参数,执行普通方法时,自动将调用该方法的对象赋值给self
  • 类方法:由对象 调用,至少一个cls参数,执行类方法时,自动将调用该方法的复制给cls
  • 静态方法:由对象 调用,无默认参数
class student:

    type = "human"

    def __init__(self, id, name):
        self.id = id
        self.name = name

    # 普通方法
    def show(self):
        print("id: {0}\t name: {1}".format(self.id, self.name))

    # 类方法
    @classmethod
    def another_init(cls, id, name):
        return cls(id, name)

    # 静态方法
    @staticmethod
    def Hello():
        print("Hello")

s = student.another_init(3, "mick")
s.show()
s.Hello()
student.Hello()

相同点:三种方法都归属于类,内存上只有一份。
不同点:三种方法的区别在于传入的参数不同,普通方法一定要对象来调用,因为普通方法的第一个参数是对象本身,类方法静态方法 既可以用对象调用,也可以用直接调用,它俩的区别在于类方法还会传入将类作为参数传入,而静态方法则没有必须要传入的参数。


属性

Python 中的属性其实是普通方法的变种,调用时:无需括号,像是访问变量一样

属性的定义方式

  • 装饰器:在方法上应用装饰器
  • 静态变量方式:在类中定义值为property对象的静态变量

Python3 取消了经典类,只有新式类。

一、装饰器方式:@property、@方法名.setter、@方法名.deleter

class student:

    def __init__(self, id, name):
        # 普通变量
        self.id = id
        self.name = name

    @property                      # 由property装饰,这个类方法变为读属性
    def myname(self):
        return self.name

    @myname.setter                 # 由setter装饰,这个类方法变为写属性
    def myname(self, name):
        self.name = name

    @myname.deleter                # 由deleter装饰,这个类方法变为写属性
    def myname(self):
        del self.name

s = student(3, "mick")
print(s.myname)
s.myname = "chen"
print(s.myname)
del s.myname

二、静态变量方式:构造 property 对象

class student:

    def __init__(self, id, name):
        # 普通变量
        self.id = id
        self.name = name

    def get_name(self):
        return self.name

    def set_name(self, name):
        self.name = name

    def del_name(self):
        del self.name

    # 参数依次对应获取,设置,删除
    myname = property(get_name, set_name, del_name)

s = student(3, "mick")
print(s.myname)
s.myname = "chen"
print(s.myname)
del s.myname


类成员权限

分为两种:

  • 公有成员:在任何地方都可以访问
  • 私有成员:在类的内部才可以访问,命名时前两个字符是下划线

私有成员通过 对象. _ 类名 __ 变量名 可以强制访问

class student:

    # 静态变量
    type = "human"
    __sex  = "male"

    def __init__(self, id, name):
        # 普通变量
        self.__id = id
        self.name = name

    def show(self):
        print(student.type, student.__sex, self.__id, self.name)

class postgraduate(student):
    def show(self):
        print(student.type, self.name)


s = student(3, "mick")
# 父类
s.name
s.type
s._student__id
s._student__sex
s.show()

# 子类
p = postgraduate(1, "hwdtc")
p.name
p.type
p._student__id
p._student__sex
p.show()

你可能感兴趣的:(python)