Python基础第十天(面向对象,类,self变量,__init__()方法,__ str__()方法,类属性和实例属性)

对象

先有类后有对象
类只有一个在这个类下对象可有多个
一个.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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值