面向对象
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数
class car:
#静态字段,类属性
cars='车的种类之一'
def __init__(self,name):
#动态字段,实例属性
self.name=name
car1=car('宝马')
print(car1.name)
print(car.cars)
print(car1.cars)
定义1个对象:class xxx:
实例化1个对象:def __init__(self,value)
__init__ 是初始化的意思
定义car(车)这个类,而宝马这个实例对象拥有 name属性
通过字典,一次性取出实例对象所有属性 __dict__
class People:
def __init__(self,name,sex,number,age):
self.name=name
self.sex=sex
self.number=number
self.age=age
p1=People('SBharmel','man',1350023,16)
print(p1.__dict__) #通过字典,一次性取出,对象所有属性
#输出结果:
#{'name': 'SBharmel', 'number': 1350023, 'sex': 'man', 'age': 16}
从属关系
cars 属于 car 类 类不能访问动态字段
name 属于 car1 对象 对象可以访问动态字段和静态字段
只有是从属关系,才能用 .xxx 方法获取
所以可以写 car.cars #获取静态字段 car1.name #获取动态字段
如果写成 car.name则会报错
不能写的原因:
1.从属关系不同
2. 车这个类可能拥有多个类型如 宝马, 奔驰 他们两个的属性不一样,如价格,车速不同
#但是对象可以获取 静态字段 car1.cars
因为 car1 也属于 这个类 (car)
class car:
def __init__(self,name,speed,price):
self.name=name
self.speed=speed
self.price=price
car1=car('宝马','130km/h','100w')
car2=car('奔驰','140km/h','80w')
print(car1.name) #正确
print(car2.price) #正确
print(car.speed) #报错
'''
Traceback (most recent call last):
File "E:\workspace\day4\backend\class.py", line 23, in
print(car.speed)
AttributeError: type object 'car' has no attribute 'speed'
'''
静态字段和动态字段
类创建的字段叫做 静态字段 cars
.sefl 创建的字段叫做 动态字段 name
静态方法(@staticmethod)和动态方法以及特性( property)
不传参数self
def foo()
不用写()
hb.bar #仅为实例对象的特性,类调用无内容
class Province:
def __init__(self,name):
self.name=name
#动态方法
def meeting(self):
print(self.name+'正在开运动会')
#静态方法
@staticmethod
def foo():
print('每个省要坚持环保')
#特性
@property
def bar(self):
print('someting')
hb=Province('湖北')
hb.meeting()
Province.foo()
hb.bar
。