对象
先有类后有对象
类只有一个在这个类下对象可有多个
一个.py文件中可以多个类
class Dog():
def eat(self):
print("小狗吃饭")
def sleep(self):
print("小狗睡觉")
d=Dog()
d.eat()
d.sleep()
ass Human():
def eat(self):
print("人在吃饭",id(self))
def study(self):
print("人在学习",id(self))
zs=Human()
zs.eat()
print(id(zs))
ls=Human()
ls.eat()
print(id(ls))
__ init__()
__ init__()内置方法在创建对象的时候自行执行
class Student():
def __init__(self,name,age,sex):
self.name=name#白色字是增加的name属性
self.age=age#增加age属性
self.sex=sex#增加sex属性
def show(self):
print("我叫{}年龄{}性别{}".format(self.name,self.age,self.sex))
zs=Student("张三",18,"男")
zs.show()
#属性不一定只能在——init——中定义,在其他也能定义
class Student():
def __init__(self,name):
self.name=name
def hehe(self,age):
self.age=age
def haha(self):
print(self.name,self.age)
zs=Student("张三")
zs.hehe(19)
zs.haha()
__ str__()
打印对象的名称时默认调用的是__str__()方法。此方法默认返回的是对象的内存地址。
class Dog():
def __init__(self,color,age):
self.color=color
self.age=age
def __str__(self):
print("hehehhe")
return "颜色%s 年龄%d"%(self.color,self.age)
d=Dog("红色",18)
print(d)#里面自动触发了(这里相当于重写了__str__()方法)方法str(d)然后进入——str——将其转换成字符串
class Teacher():
def __init__(self,name,salary):
self.name=name
self.salary=salary
def __str__(self):
return "我叫{},工资{}".format(self.name,self.salary)
zs=Teacher("张三",10000)
print(zs)
x=str(zs)
print(x)
from math import pi
class Circle():
def __init__(self,radis):
self.radis=radis
def arer(self):
return pi*self.radis*self.radis
def zhouchang(self):
return 2*pi*self.radis
def __str__(self):
return "我的半径是%.2f周长是%.2f面积是%.2f"%(self.radis,self.zhouchang(),self.arer())
a=Circle(5)
print(a)
类属性和实例属性
实例属性:在实例对象中定义的属性
类属性(静态属性):在类中定义的属性,并且多个实例对象共享一份类属性。
类名.类属性
对象名.类属性
class People():
tax=0.09#类属性
def __init__(self,salary):
self.salary=salary
def jiaoshui(self):
return self.salary*People.tax
a=People(1000000)
b=People(2000000)
print(a.jiaoshui())
print(b.jiaoshui())
People.tax=0.08
print(a.jiaoshui())
print(b.jiaoshui())
print(id(a.tax))
print(id(People.tax))
a.tax=0.07
print(People.tax)
class People():
tax = 0.09
def __init__(self, salary):
self.salary = salary
def jiaoshui(self):
return self.salary * People.tax
a = People(1000000)
b = People(2000000)
a.tax+=0.01
print("%.2f"%a.tax,id(a.tax))
print(People.tax,id(People.tax))
People.tax=200
print(a.tax)#a有了自己的属性,类中的就与自己无关了
class A():
books=["三国","西游记"]
def __init__(self,name):
self.name=name
x=A("张三")
y=A("李四")
x.books[0]="水浒"
print(y.books)
print(A.books)
x.books=["红楼梦","大清帝国"]
print(x.books)
print(y.books)
print(A.books)
例题:
class House():
def __init__(self,info,area,address):
self.info = info
self.area=area
self.address=address
self.furniture=[]
def add_furniture(self,f):
self.furniture.append(f)#两个都传进去了只是在__str__中的for f in self.furniture中将f.name拿了出来
self.area-=f.area
def __str__(self):
s="户型{},面积{},地址{}".format(self.info,self.area,self.address)
s1="\t室内家具有:"
for f in self.furniture:
s1=s1+f.name+","
return s+s1
class Furniture():
def __init__(self,name,area):
self.name=name
self.area=area
h=House("五室三厅",400,"天安门北")
f=Furniture('双人床',6)
f2=Furniture('柜子',30)
h.add_furniture(f)
h.add_furniture(f2)
print(h)