1、成员
 
    在类中,你能写的所有内容都是类的成员
 
2、变量
 
       1、实例变量:由对象去访问的变量,一般使用是  对象 . 属性

  1. class Person:
  2. def __init__(self,name,gender,hobby):
  3. self.name = name # 实例变量 对象里的变量
  4. self.gender = gender
  5. self.hobby = hobby
  6.  
  7. s = Person('张三','男','打篮球')
  8.  
  9. print(s.hobby)
  10.  
  11. s.hobby = '踢足球'
  12.  
  13. print(s.hobby)

2、类变量:变量属于类,但是对象也可以访问

  1. class Person:
  2. country = '中国'
  3.  
  4. def __init__(self,name,gender):
  5. self.name = name
  6. self.gender = gender
  7.  
  8. c = Person('Ann','女')
  9. b = Person('Bob','男')
  10.  
  11. print(Person.country)
  12. c.country = '大清' # 大坑,没有修改类变量
  13.  
  14. print(c.country) # 类变量可以给对象使用
  15. print(b.country)
 
3、方法
 
    1、实例方法:对象直接访问的方法叫实例方法(成员方法)   使用   对象.方法()
        特点:再申明的时候,需要给self,self必须放在第一个位置,在调用的时候,自动的会把对象传给形参的self
  1. class Computer:
  2.  
  3. #实例方法(成员方法)
  4. def play(self):
  5. print('电脑可以玩游戏')
  6.  
  7. # 在定义实例方法的时候,必须给出一个参数self
  8. # 形参的第一个参数,自动的把对象给传递进来
  9.  
  10. def work(self): # self是当前类的对象
  11. print(self)
  12. print('电脑可以用来工作')
  13.  
  14. c = Computer()
  15. c.work() # 调用的时候不需要手动的给出self
  16. print(c)
 
    2、类方法(@classmathod):类方法是属于类的
        特点:在申明的时候需要给出一个能够接受类名的参数,cls,也必须放在参数的第一个,在调用的时候,自动得把xx对象的类传递给cls
 
        类方法和静态方法差不多,只不过类方法需要在参数列表中的第一个位置预留一个参数位置cls, 类方法在被调用的时候也不需要传递实例参数,系统会自动的把类传递给第一个参数。
  1. class Person:
  2. # 实例方法
  3. def eat(self):
  4. print('吃遍山珍海味')
  5.  
  6. @classmethod # 装饰器,此时这个方法是一个类方法
  7. def talk(cls): # 此时接收到的cls是类名
  8. print('自言自语')
  9.  
  10. # # 用对象访问
  11. # s = Person()
  12. # s.talk() # 在调用类方法的时候,默认的把类名传递给类方法
  13. # print(Person)
  14.  
  15. # 类方法一般用类名访问
  16. Person.talk() # 类方法
3、静态方法(@staticmethod):静态方法也是属于类的,静态方法就好比,我们在类中定义了一个函数
           静态方法一般跟类方法差不多,使用类名去访问。
           静态方法不需要我们给方法传递self,也就是说,当出现一个方法不需要使用到成员变量的时候,就可以选择使用静态方法。
  1. class Quit:
  2.  
  3. @staticmethod
  4. def meet():
  5. print('会议保持安静')
  6.  
  7. # 静态方法可以使用对象访问,也可以使用类名访问,但是一般推荐使用类名访问
  8. c = Quit()
  9. c.meet()
  10.  
  11. # 推荐使用类名访问
  12. Quit.meet()
4、类的成员 - 属性

  1. class Person:
  2.  
  3. __qie = 'beauty'
  4.  
  5. def __init(self,name,secret):
  6. self.name = name
  7. self.__secret = secret # 私有内容 实例变量
  8.  
  9. def tell(self):
  10. print(f"你的秘密是{self.__secret}")
  11. print(Person.__qie) # 私有的类变量只能在类中调用
  12. return self.__secret
  13.  
  14. def __dream(self): # 私有的实例方法
  15. print('我的梦想是..')
  16.  
  17. @staticmethod
  18. def __think():
  19. print('小心思')
  20.  
  21. @classmethod
  22. def __work(cls):
  23. print('个人工作')
  24.  
  25. p =Person('zhangmeng','过去的生活')
  26. # print(p.__secret) # 私有的内容只能在类中调用
  27. #
  28. # p.tell()
  29. # print(Person.__qie)
  30.  
  31. # p.__dream()
  32. # Person.__work()
        在方法上添加一个@property,可以把一个方法变成一个属性,但是这个属性不可以被赋值
        当我们某一个属性必须经过计算才能得到结果的时候。
  1. class Person:
  2. def __init__(self,name,hobby,birth):
  3. self.name = name
  4. self.hobby = hobby
  5. self.birth = birth
  6. # 年龄应该是算出来的,而不是直接存储
  7.  
  8. @property # 把一个方法更改成一个属性,每次拿属性的时候都会自动的去执行这个方法
  9. # 方法的返回值就是属性值
  10. def age(self): # 实例方法
  11. print('我的年龄')
  12. return 2018 - self.birth
  13.  
  14. c = Person('zhangmeng','dance',1999)
  15. # c.age
  16. print(c.age) # 看着像一个变量一样使用,实际上这里是调用的一个方法
  17.  
  18. # c.age = 26 # 不可以,因为age是一个方法,不是一个变量
注意:
    1、方法参数只能有一个self
    2、方法上方要写@property
    3、调用的时候,不需要写括号,直接当成属性变量来使用就可以了
    4、这种套路只能取值,不能设置值
 
 
5、私有
 
        所有以双下划线开头的方法,变量都是私有内容,
        私有的内容不能直接访问,但是如果对方开辟了外界访问的通道,那可以通过这个公共的方法来获取到私有的内容,这样做的好处是,外界只能看,但是不能更改。
        对于私有的内容而言,子类是无法继承的。
  1. class Person:
  2.  
  3. __qie = 'beauty'
  4.  
  5. def __init(self,name,secret):
  6. self.name = name
  7. self.__secret = secret # 私有内容 实例变量
  8.  
  9. def tell(self):
  10. print(f"你的秘密是{self.__secret}")
  11. print(Person.__qie) # 私有的类变量只能在类中调用
  12. return self.__secret
  13.  
  14. def __dream(self): # 私有的实例方法
  15. print('我的梦想是..')
  16.  
  17. @staticmethod
  18. def __think():
  19. print('小心思')
  20.  
  21. @classmethod
  22. def __work(cls):
  23. print('个人工作')
  24.  
  25. p =Person('zhangmeng','过去的生活')
  26. # print(p.__secret) # 私有的内容只能在类中调用
  27. #
  28. # p.tell()
  29. # print(Person.__qie)
  30.  
  31. # p.__dream()
  32. # Person.__work()
 

python -- 面向对象-成员的更多相关文章

  1. python 面向对象(成员,静态,类)的(变量,方法)区别

    静态方法是使用@staticmethod装饰的方法,并且参数表中不需要self或者cls,可以访问类成员变量 默认的方法是有self的,是成员方法,可以访问私有变量和方法(通过self.xxx),或者 ...

  2. Python面向对象(成员修饰符)

    day25 成员修饰符 class Foo: def __init__(self, name, age): self.name = name self.__age = age#私有,外部无法直接访问 ...

  3. Python面向对象(成员)(二)

    1. 成员 在类中你能写的所有内容都是类的成员 2. 变量 1. 实例变量: 由对象去访问的变量. class Person: def __init__(self, name, id, gender, ...

  4. python 面向对象和类成员和异常处理

    python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...

  5. python面向对象(二)——类成员

    Python面向对象    类成员 1.字段         普通字段    属于对象         静态字段    属于类   2.方法 普通方法   触发者是对象    括号里至少一个参数 se ...

  6. python 面向对象(类的特殊成员)

    python 面向对象: (思维导图 ↑↑↑↑) 类的特殊成员 python的类成员存在着一些具有特殊含义的成员 1.__init__: 类名() 自动执行 __init__ class Foo(ob ...

  7. Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass

    Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...

  8. python 面向对象专题(五):私有成员、类方法、静态方法、属性、isinstance/issubclass

    https://www.cnblogs.com/liubing8/p/11325421.html 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubc ...

  9. 『无为则无心』Python面向对象 — 51、私有成员变量(类中数据的封装)

    目录 1.私有成员变量介绍 (1)私有成员变量概念 (2)私有成员变量特点 (3)私有成员变量体验 2.属性私有化工作原理 3.定义成员变量的标识符规范 4.私有成员变量的获取和设置方式 1.私有成员 ...

随机推荐

  1. postman 做接口测试之学习笔记

    Postman 之前是作为Chrome 的一个插件,现在要下载应用才能使用. 以下是postman 的界面: 各个功能区的使用如下: 快捷区: 快捷区提供常用的操作入口,包括运行收藏夹的一组测试数据, ...

  2. 关闭图形界面下普通用户关机重启命令- 7.x - CentOS

    vim /etc/polkit-/rules.d/-inhibit-shutdown.rules polkit.addRule(function(action, subject) { if (acti ...

  3. ubuntu(centos) server安装vmware tools

    Ubuntu: root登录ubutun $ sudo su vmware中选择菜单虚拟机->安装VMware Tools 命令行如下 // 将cdrom挂载到mnt $ mount -t is ...

  4. angularjs 绑定多个属性到下拉框

    绑定下拉框 angularjs  代码: //活动下拉切换 $scope.activityChange = function () { var cards = new Array(); var url ...

  5. 知识在与温故、总结-再读CLR

    序 CLR,通用语言运行时,每个.Net 程序猿,都会第一时间接触到.记得2008年,第一次学习Jeffrey Richter的CLR Via C#,读的懵懵懂懂,大抵因为编码太少,理解的只是概念和皮 ...

  6. 石家庄铁道大学课程信息管理系统(javaWeb+servlet+Mysql)

    实现网页版的课程管理系统,具有增删改查的功能. 1.首先连接数据库,具体数据库的使用及如何连接eclipse,参考     https://blog.csdn.net/lrici/article/de ...

  7. jQuery属性attr

    设置多个属性/值对 为被选元素设置一个以上的属性和值. 语法 $(selector).attr({attribute:value, attribute:value ...})比如:$("im ...

  8. web前端开发常用组件

    web前端开发常用组件 1. 对话框(dialog):jbox(适合对话框等其它功能).colorbox(也很强大,可以弥补jbox图片轮播的落点),      这二者基本能搞定所有对话框的情况 2. ...

  9. Html lable 标签

    Html lable 标签 <html> <body> <!-- label 关联光标标签,点击文字使得关联的标签获取光标.for="username" ...

  10. Linux 高级文件管理

    1.标准输出(ls -l /dev/stdin 0 ),标准输入(ls -l /dev/stdout 1 ),错误输出(ls -l /dev/stderr 2 ). 2.ls /etc/passwd  ...