码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象

时间:2018-09-13 22:45:55      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:改变   hide   变量   bit   print   参数   ict   处理   display   

面向对象
  类:抽象的
  对象:具体的

技术分享图片
class person:    #类名为person
    def __init__(self,*args):    #__init__为初始化方法;self是一个必须传的对象
        self.name = args[0]
        self.hp = args[1]
        self.aggr = args[2]
        self.sex = args[3]
        
    def walk(self,n):    #定义方法;一般情况下必须传self参数,且必须写在第一个;后面还可以传其他参数,想传多少就多少
        print("%s走了%s步" % (self.name,n)
        
    country = "china"    #创造了一个只要是这个类就一定有的属性(静态属性)

    
ppd = person("王者","100","5","male")    #对象 = 类(参数),这个过程叫实例化
print(ppd.name)    #查看属性值
print(ppd.__dict__)    #查看所有属性
ppd.walk(10)    #person.walk(ppd,10)    #调用方法    类名.方法名(对象名) 
print(person.country)    #可以查看类中的静态属性,不需要实例化就可以查看
初识类
技术分享图片
对象 = 类名()    #实例化过程;对象也叫实例
过程:
    类名():首先会创造出一个对象,创建了一个self变量
    调用__init__方法,类名括号里的参数会被这里接收
    执行__init__方法
    返回self
对象能做的事:
    查看属性
    调用方法
    __dict__方法对于对象的增删改查操作都可以;跟操作字典的语法一样
类名能做的事:
    实例化
    调用方法
    调用类中的属性,也就是调用静态属性
    __dict__方法对于类中的名字只能看,不能操作
小结

何时使用面向对象:
  非常明显的处理一类事物,这些事物都具有相似的属性和功能
  当有几个函数需要反反复复传入相同的参数的时候
  一些参数都是对象的属性的时候

技术分享图片
from math import pi


class Circle:
    def __init__(self, r):
        self.r = r

    def area(self):
        return pi*(self.r**2)
    
    def perimeter(self):
        return 2*pi*self.r


c = Circle(6)
print(c.area())
print(c.perimeter())
求圆的面积和周长
技术分享图片
class Person:
    def __init__(self, name, hp, aggressive, sex):
        self.name = name
        self.hp = hp
        self.aggressive = aggressive
        self.sex = sex

    def attack(self, dog):
        dog.hp -= self.aggressive


class Dog:
    def __init__(self, name, hp, aggressive, king):
        self.name = name
        self.hp = hp
        self.aggressive = aggressive
        self.kind = king

    def bite(self, person):
        person.hp -= self.aggressive
        if 0 < person.hp < 100:
            print("%s咬了%s, %s掉了%s血" % (self.name, person.name, person.name, self.aggressive))
        elif person.hp <= 0:
            print("{}凉了".format(person.name))


pq = Person("佩奇", 100, 10, "Male")
ted = Dog("泰迪", 500, 50, "Teddy")

# ppd.attack(ted)  #Person.attack(ppd, ted)
# print(ted.hp)    #490
ted.bite(pq)
Dog.bite(ted, pq)
print(pq.hp)
#泰迪咬了佩奇, 佩奇掉了50血
#佩奇凉了
#0
佩奇大战泰迪

类中的静态变量可以被对象和类调用:
  对于不可变数据类型来说,类变量最好用类名操作
  对于可变数据类型来说,对象名的修改是共享的,重新赋值是独立的

技术分享图片
#不可变数据类型,类名方式修改变量
class Test:
    name = "ted"
    def __init__(self, x):
        self.x = x
a = Test(10)
b = Test(100)
Test.name = "peiqi"
print(Test.name)  #peiqi
print(a.name)  #peiqi
print(b.name)  #peiqi

#不可变数据类型,对象名方式修改变量
class Test:
    name = "ted"
    def __init__(self, x):
        self.x = x
a = Test(10)
b = Test(100)
a.name = "peiqi"
print(Test.name)  #ted
print(a.name)  #peiqi
print(b.name)  #ted


#可变数据类型,修改变量是共享的
class Test:
    name = ["ted"]
    def __init__(self, x):
        self.x = x
a = Test(10)
b = Test(100)
a.name[0] = "peiqi"
print(Test.name)  #peiqi
print(a.name)  #peiqi
print(b.name)  #peiqi

#可变数据类型,赋值变量是独立的
class Test:
    name = ["ted"]
    def __init__(self, x):
        self.x = x
a = Test(10)
b = Test(100)
a.name = "peiqi"
print(Test.name)  #["ted"]
print(a.name)  #"peiqi"
print(b.name)  #["ted"]
View Code
技术分享图片
class Person:
    money = 0

    def work(self):
        Person.money += 100


mother = Person()
father = Person()
mother.work()
father.work()
print(Person.money)  #200
共享静态属性例子

 

 

000

 

面向对象

标签:改变   hide   变量   bit   print   参数   ict   处理   display   

原文地址:https://www.cnblogs.com/believepd/p/9643471.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!