Python__class__详解

发布时间:2023-05-20

一、创建一个类

使用 class 关键字创建一个类:

class Person:
    pass

如果你想为这个类增加属性,可以在类内部声明:

class Person:
    age = 0
    name = ''

在 Python 中,属性定义在类级别。同样,如果想增加方法,可以使用 def 语句定义:

class Person:
    age = 0
    name = ''
    def setAge(self, age):
        self.age = age

第一个参数 self 是实例化的一个引用,用来调用类内的实例,即在调用 setAge 方法时,通过实例化的引用来改变 age 属性。下面是使用类来创建对象:

p = Person()
p.setAge(18)
print(p.age)

输出结果为:

18

二、继承

Python 中一个类可以继承另一个类,继承可以使类与类之间有更紧密的联系,可以重载或扩展基类的属性和方法。我们可以通过继承来创建一些特殊的类。 下面是一个继承的例子:

class Animal:
    def say(self):
        print('I am an animal.')
class Dog(Animal):
    def say(self):
        print('I am a dog.')

在这个例子中,AnimalDog 的父类,Dog 可以继承 Animal 的方法和属性。 接下来我们创建一个 Cucumber 类并继承自 Vegetable

class Vegetable:
    def say(self):
        print('I am a vegetable.')
class Cucumber(Vegetable):
    pass
c = Cucumber()
c.say()

输出结果为:

I am a vegetable.

三、多态

多态是面向对象编程的基本概念之一,多态允许使用相同的方法调用不同的对象,从而实现不同的行为。 下面是一个多态的例子:

class Person:
    def say(self):
        pass
class Chinese(Person):
    def say(self):
        print('我是中国人。')
class American(Person):
    def say(self):
        print('I am American.')
def speak(person):
    person.say()
p1 = Chinese()
p2 = American()
speak(p1)
speak(p2)

输出结果为:

我是中国人。
I am American.

四、封装

在 Python 中,我们可以通过下划线实现封装,可以有效的保护数据的安全性。对外部不可见的属性和方法,可以通过下划线实现内部封装。 下面是一个封装的例子:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    def _get_name(self):
        return self._name
    def _set_name(self, name):
        self._name = name
    name = property(_get_name, _set_name)
p = Person('Tom', 18)
print(p.name)
p.name = 'Lily'
print(p.name)

运行结果为:

Tom
Lily

在这个例子中,我们通过下划线实现对 name 属性的封装,并通过 @property 装饰器设置属性的 getter 和 setter 方法。

五、类方法和静态方法

在 Python 中,类方法和静态方法是两种特殊的方法。类方法是带有 @classmethod 装饰器的方法,它的第一个参数是 cls,表示调用该方法的类。静态方法是带有 @staticmethod 装饰器的方法,它不需要传递任何参数。 下面是一个类方法和静态方法的例子:

class Person:
    count = 0
    def __init__(self, name, age):
        self.name = name
        self.age = age
        Person.count += 1
    @classmethod
    def getCount(cls):
        return cls.count
    @staticmethod
    def sayHi():
        print('Hi')
p1 = Person('Tom', 18)
p2 = Person('Lily', 20)
print(Person.getCount())
Person.sayHi()

输出结果为:

2
Hi

在这个例子中,我们通过类方法实现了对象的计数,静态方法 sayHi 不需要传入参数,可以直接调用。

六、总结

Python 是一门面向对象的编程语言,在 Python 中,我们可以通过 class 关键字来创建一个类,并且可以在类内部定义属性和方法来实现各种功能。类可以继承另一个类,多态允许使用相同的方法调用不同的对象,实现不同的行为。封装可以有效的保护数据的安全性,可以使用下划线实现内部封装。类方法和静态方法是面向对象编程中两种特殊的方法,可以帮助我们更好的实现类的功能。