Class&&Object
@ Zhang zhiyang · Wednesday, Nov 11, 2020 · 3 minute read · Update at Wednesday, Nov 11, 2020

面向对象…

avatar

0x00 类:封装(数据成员+方法)

0x01 对象:类的实例化

如何定义类:class关键字

数据成员可以比作类下的全局变量,方法则是类下的函数

类只可以描述代码,而不能执行代码,可以将类写入模块,从模块调用类

  • 创建类
class Student:
    name='zzy'
    age=21
    def do_homework(self):
        print('homework')

类的方法必须带有self这个参数,且调用数据成员时需要在前面加上self.=>类实例对象本身

  • 由类实例化对象
student1=Student()

构造函数__init__()

构造函数是一个特殊的方法,主要用于类的初始化,当类被调用时,会自动执行,类的参数就是构造函数的参数,可以通过调用类来访问__init__()方法

通过构造函数参数可以定义实例变量和更改实例变量的值,从而生成不同的对象

class Student:
    name='zzy'
    age=21
    def __init__(self,name,age):
        self.name='hxd'  #初始化实例变量
        self.age=22
        print('student')
    def do_homework(self):
        print('homework')
student1=Student('hhh',20) #构造函数生成对象并且给实例变量赋值

0x02 类变量与实例变量

数据成员是类变量,是该类下所有实例对象共享的,由类生成的实例对象自己的变量是实例变量。

当一个实例对象要赋值给实例变量时,前面要加上self.

没有实例变量但是有一个重名的类变量,会默认使用这个类变量

class Student:
    name='zzy'    
    age=21
    def __init__(self,name,age):
        self.name = name     
        self.age = age
    def do_homework(self):
        print('homework')
print(Student.name)  #操作类变量
student1=Student('hxd')
print(student1.name) #操作实例变量

内部变量__dict__

__dict__字典变量存储了一个对象下所有变量的信息

student1=Student('zzy',21)
print(student1.__dict__)

0x03 实例方法、类方法、静态方法

  • 实例方法:实例方法就是普通的方法,可以通过对象访问,在实例方法中可以直接访问实例变量,最好加上self. 也可以访问类变量,通过实例化对象可以访问实例方法,实例方法就是对象可以操作的方法

​ 在实例方法中访问类变量(__class__:查看对象所在的类)

class Student:
    name='zzy'
    def student(self,name,age):
        self.name = name     
        self.age = age 
        print(Student.name) | print(self.__class__.name)  #在实例方法中访问类变量
student1=Student() #实例化对象
student1.student('hhh',20) #对象访问实例方法
  • 类方法:类方法是一种特殊的方法,在使用时需要在前面加上装饰器@classmethod声明,类方法可以直接访问类变量 要加上cls.=>类本身,通过类可以访问类方法,类方法就是类可以操作的方法,在python里对象也可以访问类方法(不提倡)
class Student:
    sum=0
    @classmethod
    def Sum(cls):
        print(cls.sum)
Student.Sum()  #访问类方法
  • 静态方法:静态方法也是一种特殊的方法,在使用时需要在前面加上装饰器@staticmethod声明 静态方法不需要默认参数self,对象和类都可以调用它
class Student:
    @staticmethod 
    def add(x,y):
        print('666')

0x04 内部调用

在一个方法的内部可以调用另一个方法,同样需要self.

class Student:
    def look_book(self):
        self.do_homework()
    def do_homework(self):
        print('做好了嘻嘻嘻')
student1=Student()
student1.look_book()

0x0成员可见性:公开和私有

在其他语言中,有publicprivate这俩个关键字来声明数据的可见性,但python没有

python的数据默认为公开,在前面加上__表示私有

class Student:
    __name='qixue'
    def __init__(self):
        pass
print(Student().__name)

如果将实例变量私有化,变量名字前会加上类名,形成一个新的变量

Zhang zhiyang's blog
不过是些许风霜罢了
cyber http linux markdown math mysql php python tool

© 2016 - 2021 Zhangzhiyang的博客

Powered by Hugo with theme Dream.

我听别人说这世界上有一种鸟是没有脚的,它只能够一直的飞呀飞呀,飞累了就在风里面睡觉,这种鸟一辈子只能下地一次,那一次就是它死亡的时候。

日程

Zhangzhiyang的 ❤️ 博客

其他

如果你喜欢我的开源项目或者它们可以给你带来帮助,可以赏一杯咖啡 ☕ 给我。~

If you like my open source projects or they can help you. You can buy me a coffee ☕.~

PayPal

https://paypal.me/g1eny0ung

Patreon

Become a Patron!

微信赞赏码

wechat

最好附加一下信息或者留言,方便我可以将捐助记录 📝 下来,十分感谢 🙏。

It is better to attach some information or leave a message so that I can record the donation 📝, thank you very much 🙏.