2019-05-25

面向对象是一种编写代码的思维方式:程序是由什么构成的。
类,其实是一种抽象。
User类:把用户相关信息抽象到一起。
类名采用驼峰结构,并且首字母大写。一般来说,类由属性和(方法)行为组成。属性表示了这个类的特点,(方法)行为规定了这个类的功能。

程序(类) = 数据结构(属性) + 算法(方法、行为) 。

函数定义在类里的时候,称为方法
类->实例,实例是类的具体化。
self指的是:当前对象(方法的调用者)

class Cat:
    # 分配内存
    def __new__(cls, *args, **kwargs):
        print("__new__")
        return super().__new__(cls)

    #构造方法,该方法会在创建对象(实例)的时候,自动调用
    def __init__(self,color,name):
        self.color = color
        self.__name = name

    def catch_rat(self):
        print(self.__name + "抓到了老鼠")


# 创建一个实例
tom = Cat('Blue','Tom')
tom.catch_rat()

#实例化对象的过程:1、分配内存出来(__new__) 2、初始化值(__init__)
# 私有属性
print(tom._Cat__name)
# tom.__name = 'JiaFeiCat'
# print(tom.__name)
#属性私有化
# 1、两个下划线开头 2、自己约定_单下划线
# 双下划线为什么能够隐藏变量?__dict__,里面装的实例的所有属性。 双下划线开头的属性,会被名称转换:_类名 + 属性名
print(tom.__dict__)


class Student:
    """
    学生类
    """
    def __init__(self,name,age):
        self.__name = name;
        self.__age = age


    def set_name(self,name):
        if not len(name) < 3:
            self.__name = name

    def get_name(self):
        return self.__name

    #默认是get的
    @property
    def age(self):
        print("年龄")
        return self.__age

    @age.setter
    def age(self,age):
        if age > 0  and age < 100:
            self.__age = age

s = Student("zhangsan",20)

# 提供了get、set方法
# Girl
print(s.get_name())
s.set_name("lisi")
print(s.get_name())

s.age = 50
print(s.age)


# 类也是对象
# self.属性名: 实例属性
# 在类里直接定义的属性,称为类属性。类属性由所有对象共享
class User:
    num = 0

    def __init__(self,name):
        self.name = name
        User.num += 1

    def print_name(self):
        print(self.name,User.num)

    @classmethod
    def create_user(cls,name,age):
        print(cls)
        user = cls(name)
        user.age = age
        return user


    @staticmethod
    def sum(a,b):
        return a + b

    def __str__(self):
        _str = ""
        for k,v in self.__dict__.items():
            _str += str(k)
            _str += ":"
            _str += str(v)
            _str += ","

        return _str


u = User("zs")
u.print_name()

u1 = User('ls')
u1.print_name()

User.num += 1

u1.print_name()

u2 = User.create_user('zs',20)
print(u2.age)
print(u2.name)

print(User.sum(2,3))

@classmethod 修饰的方法是类方法,类方法可以通过类名调用。类方法必须有一个类型参数:cls。类方法也可以通过实例调用
@staticmethod 修饰的方式,是静态方法。通过类名可以访问。当作普通函数就行。写工具类挺好。静态方法也可以通过实例调用
u3 = u1.create_user('zs',21)
print(u3.age)
print(u3.sum(6,6))
print(u3)

模拟一个游戏,有一个怪兽(Monster),还有一个玩家(Hero)。

import random as rn

class Sprite:
    def __init__(self,name):
        self.blood = 100
        self.power = 12
        self.name = name

    def attack(self,monster):
        minus = rn.randrange(self.power - 5,self.power + 5)
        if monster.has_living():
            monster.minus_blood(minus)
        print(monster.name + ":" + str(monster.blood))


    def minus_blood(self,num):
        self.blood -= num

    def has_living(self):
        if self.blood > 0:
            return True
        return False

m = Sprite("哥斯拉")
h = Sprite("凹凸曼")
while m.has_living() and h.has_living():
    m.attack(h)
    h.attack(m)

if m.has_living():
    print(m.name + "获得胜利")
if h.has_living():
    print(h.name + "获得胜利")
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容