1、类中的属性:静态属性。
class Person:
country = 'China' # 类属性,静态属性
def __init__(self, name, age): # 初始化方法,self是必须传的参数,且放在在第一个
self.name = name # 往字典里添加属性
self.age = age
def walk(self): # 方法,一般情况下必须传self,且是第一个,还可传其他参数
print('Walking.')
# 实例化一个p对象
p = Person('chang', 28) # 类名可以实例化对象,p是一个对象
print(Person.country) # 输出 China # 类名可以查看类中的属性,不需要实例化也可以查看
print(p.country) # 查看对象的属性
class Person:
country = 'China'
def __init__(self, name, age):
self.name = name
self.age = age
def walk(self):
print('Walking.')
# 实例化对象
p = Person('chang', 28)
print(Person.__dict__) # 打印所有类中的属性
print(p.__dict__) # 打印对象的属性
p.__dict__['name'] = 'chun' # 通过双下__dict__对name属性值进行修改
print(p.__dict__) # 打印对象的属性值
结果:
看两个对象的交互:
class Person:
def __init__(self, name, blood, aggr, sex):
self.name = name
self.blood = blood
self.aggr = aggr
self.sex = sex
def attack(self, dog):
dog.blood -= self.aggr
class Dog:
def __init__(self, name, blood, aggr, kind):
self.name = name
self.blood = blood
self.aggr = aggr
self.kind = kind
def bite(self, person):
person.blood -= self.aggr
dog = Dog('Tom', 100, 10, 'teddy')
print(dog.blood)
# 实例化一个人
p = Person('chang', 100, 20, 'male')
print("The default blood value of person: ", p.blood)
dog.bite(p)
print("After person be bited, the blood value is: ", p.blood)
print("Before person's attack:", dog.blood)
p.attack(dog)
print("After person's attach:", dog.blood)
结果:
练习:
练习一:在终端输出如下信息
小明,10岁,男,上山去砍柴
小明,10岁,男,开车去东北
小明,10岁,男,最爱大保健
老李,90岁,男,上山去砍柴
老李,90岁,男,开车去东北
老李,90岁,男,最爱大保健
class Person:
def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex
def clumb(self):
print('%s, %s岁, %s, 上山去砍材' % (self.name, self.age, self.sex))
def drive(self):
print('%s, %s岁, %s, 开车去东北' % (self.name, self.age, self.sex))
def favor(self):
print('%s, %s岁, %s, 最爱大保健' % (self.name, self.age, self.sex))
xiaoming = Person('小明', 10, '男')
xiaoming.clumb()
xiaoming.drive()
xiaoming.favor()
laoli = Person('老李', 90, '男')
laoli.clumb()
laoli.drive()
laoli.favor()
当有几个函数需要反反复复地传入相同的参数的时候,就可以使用面向对象,这些参数就是对象的属性。
非常明显地处理一类事物,这些事物都具有相似的属性和功能,这就很明显地需要使用面向对象。
题:circle 属性、半径,求周长和面积:
from math import pi
class Circle():
def __init__(self, radius):
self.radius = radius
def circumference(self):
return pi * 2 * self.radius
def area(self):
return pi * pow(self.radius, 2)
circle10 = Circle(10)
print(round(circle10.circumference(), 2))
print(round(circle10.area(), 2))
总结:
定义类
init方法
self是什么?self拥有的属性都属于对象
类中可以定义静态方法
类中可以定义方法,方法都必须传一个参数self
实例化
实例化、对象
对象查看属性
对象调用方法
正方形的例子:
class Square:
def __init__(self, length):
self.length = length
def perimeter(self):
return 4 * self.length
def area(self):
return self.length * self.length
square1 = Square(10)
print(square1.area())
print(square1.perimeter())