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

面对对象之@classmethod、@staticmethod用法

时间:2016-11-04 20:47:31      阅读:362      评论:0      收藏:0      [点我收藏+]

标签:end   4.0   summary   use   xpath   style   实例   cte   lock   

@classmethod用法(修饰的函数,第一个参数cls默认是类名,调用方法:实例对象或类对象.方法)

class C_mthod(object):
    name = "f**k"
    def __init__(self,name):
        self.name = name
    @classmethod
    def t_mthod(cls):
        print("hello world",cls.name)

d = C_mthod("F**K")
C_mthod.t_mthod()

————————————————————
hello world f**k

@classmethod调用类静态方法,无法调用类继承方法

分享一个爬虫方法,仅供参考

技术分享
  1 #!/usr/bin/env python
  2 # -*- coding: utf-8 -*-
  3 
  4 import random
  5 
  6 import requests
  7 from lxml import etree
  8 
  9 
 10 class WanfangSpider(object):
 11     @classmethod
 12     def crawl_with_keyword(cls, keyword):
 13         url = http://s.wanfangdata.com.cn/Paper.aspx?q= + keyword
 14         print url
 15         response = requests.get(url, cls.get_headers())
 16         if response.status_code == 200:
 17             return cls.get_info(response.text)
 18         else:
 19             return None
 20 
 21     @classmethod
 22     def get_headers(cls):
 23         user_agent = [
 24             Mozilla / 5.0(compatible;MSIE9.0;Windows NT 6.1;Trident / 5.0,
 25             Mozilla / 4.0(compatible;MSIE6.0;Windows NT 5.1,
 26             Mozilla / 5.0(compatible;MSIE7.0;Windows NT 5.1,
 27             Mozilla / 5.0(compatible;MSIE8.0;Windows NT 6.0,
 28             Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
 29         ]
 30         headers = {
 31             User-Agent: random.choice(user_agent)
 32         }
 33         return headers
 34 
 35     @classmethod
 36     def get_info(cls, content):
 37         tree = etree.HTML(content)
 38         divs = tree.xpath(//*[@class="left-record"])
 39         result = []
 40         for div in divs:
 41             a_dict = {}
 42             url = div.xpath(div/a[@class="title"]/@href)
 43             title = div.xpath(div/a[@class="title"])[0].xpath(string(.))
 44             subtitle = div.xpath(div[@class="record-subtitle"])[0].xpath(string(.))
 45             # print url, title, subtitle
 46             if not title:
 47                 title = None
 48 
 49             if url:
 50                 url = url[0]
 51             else:
 52                 url = None
 53 
 54             if subtitle:
 55                 subtitle = subtitle.strip()
 56             else:
 57                 subtitle = None
 58             a_dict[url] = url
 59             a_dict[title] = title
 60             a_dict[subtitle] = subtitle
 61             result.append(a_dict)
 62         return result
 63 
 64 
 65 class It199Spider(object):
 66     @classmethod
 67     def crawl_with_keyword(cls, keyword):
 68         url = http://www.199it.com/archives/tag/ + keyword
 69         print url
 70         response = requests.get(url, cls.get_headers())
 71         if response.status_code == 200:
 72             return cls.get_info(response.text)
 73         else:
 74             return None
 75 
 76     @classmethod
 77     def get_headers(cls):
 78         user_agent = [
 79             Mozilla / 5.0(compatible;MSIE9.0;Windows NT 6.1;Trident / 5.0,
 80             Mozilla / 4.0(compatible;MSIE6.0;Windows NT 5.1,
 81             Mozilla / 5.0(compatible;MSIE7.0;Windows NT 5.1,
 82             Mozilla / 5.0(compatible;MSIE8.0;Windows NT 6.0,
 83             Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
 84         ]
 85         headers = {
 86             User-Agent: random.choice(user_agent)
 87         }
 88         return headers
 89 
 90     @classmethod
 91     def get_info(cls, content):
 92         tree = etree.HTML(content)
 93         articles = tree.xpath(//article)
 94         result = []
 95         for article in articles:
 96             a_dict = {}
 97 
 98             # 提取正文
 99             img_url = article.xpath(div[@class="entry-list-left"]/div/a/img/@src)
100             title = article.xpath(div[@class="entry-list-right"]/h2/a/text())
101             url = article.xpath(div[@class="entry-list-right"]/h2/a/@href)
102             post_time = article.xpath(div[@class="entry-list-right"]/table/tr/td[2]/text())
103             tag = article.xpath(div[@class="entry-list-right"]/table/tr/td[4]/a/text())
104             summary = article.xpath(div[@class="entry-list-right"]/p[@class="post-excerpt"]/text())
105             print img_url, url, title, post_time, tag, summary
106 
107             # 构造字典
108             a_dict[img_url] = img_url[0] if img_url else None
109             a_dict[title] = title[0] if title else None
110             a_dict[url] = url[0] if url else None
111             a_dict[post_time] = post_time[0] if post_time else None
112             a_dict[tag] = tag[0] if tag else None
113             a_dict[summary] = summary[0] if summary else None
114             result.append(a_dict)
115         return result if len(result) < 10 else result[0: 10]
classmethod类方法使用

@staticmethod(不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。调用方法:实例对象或类对象.方法 )

class A(object):
    bar = 1
    def foo(self):
        print(foo)

    @staticmethod
    def static_foo():
        print(static_foo)
        print(A.bar)

    @classmethod
    def class_foo(cls):
        print(class_foo)
        print(cls.bar)
        cls().foo()

A.static_foo()
A.class_foo()

——————————————————————
static_foo
1
class_foo
1
foo

 

面对对象之@classmethod、@staticmethod用法

标签:end   4.0   summary   use   xpath   style   实例   cte   lock   

原文地址:http://www.cnblogs.com/patrick0715/p/6031321.html

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