前と我々はまた、オブジェクトに関するいくつかのアイデアを持っているオブジェクト指向のクラスを導入しました。
簡単に言えば、オブジェクトの特性とスキルの組み合わせです。
7.3.1 __init__メソッド
__init__方法は、独自を有するものとして、オブジェクトの特性を指定するために使用されます。(初期化方法)
class Student:
school = 'aaa' # 变量又称-类的数据属性
def __init__(self, name, sex, age): # 实例化的时候就会调用__init__方法
self.Name = name # 把参数传入实例化的对象 (python 大小写区分)
self.Sex = sex # 把参数传入实例化的对象
self.Age = age # 把参数传入实例化的对象
def learn(self): # 函数又称-类的函数属性
print('learning')
def eat(self):
print('eating')
def sleep(self):
print('sleeping')
stu1 = Student('xiaoming', 'FM', 13) # 因为__init__方法有位置参数,所以初始化的时候必须给定参数,如果不给参数会报错
# 加上__init__方法后,实例化的步骤
# 1. 先产生一个空对象
# 2. 调用 Student.__init__(stu1, 'xiaoming', 'FM', 13)
# 传入的参数在stu1的命名空间中
# 查属性
print(stu1.__dict__) # 字典形式输出一下对象的属性
print(stu1.Name)
print(stu1.Sex)
print(stu1.Age)
# 改
stu1.Name = 'xiaowang'
print(stu1.__dict__)
print(stu1.Name)
# 增
del stu1.Name
print(stu1.__dict__)
# 删
stu1.class_name = 'python dev'
print(stu1.__dict__)
# 实例化stu2
stu2 = Student('xiaoyu', 'FM', 11)
print(stu2.__dict__)
7.3.2プロパティは、バインディングのアプローチを探します
そしてスキル類似した特徴は、(クラスの属性と機能は、固有のデータを属性)クラスに保存されています
- データ属性クラス:すべてのオブジェクトに共通であります
- 関数属性クラス:オブジェクトにバインドされ、異なる結合方法にバインドされたオブジェクトが異なっています。実行の方法は、それが唯一のオブジェクトに作用します
class Student:
school = 'aaa' # 变量又称-类的数据属性
def __init__(self, name, sex, age): # 实例化的时候就会调用__init__方法
self.Name = name # 把参数传入实例化的对象 (python 大小写区分)
self.Sex = sex # 把参数传入实例化的对象
self.Age = age # 把参数传入实例化的对象
def learn(self): # 函数又称-类的函数属性
print('learning', self.Name)
def eat(self):
print('eating')
def sleep(self):
print('sleeping')
stu1 = Student('xiaoming', 'M', 13)
stu2 = Student('xiaowang', 'FM', 13)
stu3 = Student('xiaoliu', 'M', 11)
# 类中的数据属性:是所有对象共有的,保存在同一个内存地址中
print(Student.school, id(Student.school)) # 以下地址相同
print(stu1.school, id(stu1.school))
print(stu2.school, id(stu2.school))
print(stu3.school, id(stu3.school))
# 类中的函数属性:是绑定给对象的,绑定到不同的对象是不同的绑定方法。方法只作用于执行它的对象
print(Student.learn, id(Student.learn)) # 是function类型,一般函数
Student.learn(stu1) # 可以传入对象来执行,不传会报错
Student.learn(stu2) # 可以传入对象来执行
Student.learn(stu3) # 可以传入对象来执行
# 对象调用绑定方法时,会将对象本身当做第一个参数传入,传给self
print(stu1.learn, id(Student.learn)) # 内存地址不同,是bound method类型:绑定方法
print(stu2.learn, id(Student.learn)) # 内存地址不同,是bound method类型:绑定方法
print(stu3.learn, id(Student.learn)) # 内存地址不同,是bound method类型:绑定方法
# 输出例:<bound method Student.learn of <__main__.Student object at 0x000000000228D5F8>> 36087736
stu1.learn() # 相当于learn(stu1)
stu2.learn() # 相当于learn(stu2)
stu3.learn() # 相当于learn(stu3)
# stu3.learn(stu3) 如果再传入,会报错,说你传入了2个参数
# 当对象和类有同一个变量的时候,跟函数类似,先访问对象中>类中>父类,当父类中都没有,就会报错,不会去全局变量找。
stu1.x = 'xxx'
Student.x = 'XXXXXX'
print(stu1.x)
print(stu1.__dict__)
del stu1.x
print(stu1.x)
print(stu1.__dict__)
実際に使用して被験体に使用される、バインドされたオブジェクトのクラス定義された関数
補足Pythonオブジェクト内のすべて
Pythonのオブジェクトとのpython3内のクラスとタイプの統一コンセプトですべて。それはまた、データ型のクラスであります
print(type([1,2,3])) # 结果:<class 'list'> ,即是说 list其实是一个类
li = [1,2,3] # li = list([1,2,3])
li.append(2) # 这个append也是li的绑定方法
list.append(li, 2) # 这个其实就相当于,执行了类list的append的方法
- 小型ノート:
- 別の視点のクラスを定義することは異なっています。
- 正確な企業の現実などのクラス、でプログラムを等しくないクラスの現実は、プログラム内の利点は、などの部門クラス、ビジネスクラスに分割する必要があります
- 要件をプログラムに何か、プログラムはまた、現実には、このようなポリシークラスとして、クラスに存在しない定義することが、現実には存在しませんが、プログラムの中で確かに非常に一般的なクラスです。
オブジェクト指向のメリット
など、高い知識の後の時点での拡張性、継承、カプセル化は、導入されます